{"id":2602,"date":"2025-03-24T08:46:57","date_gmt":"2025-03-23T23:46:57","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2602"},"modified":"2025-03-24T08:47:26","modified_gmt":"2025-03-23T23:47:26","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91laravel-form%e3%81%ae%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e5%ae%9f%e8%a3%85%e6%89%8b%e9%a0%86%e3%81%a89%e3%81%a4%e3%81%ae%e3%83%99","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2602","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Laravel Form\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u5b9f\u88c5\u624b\u9806\u30689\u3064\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Laravel Form\u3068\u306f\uff1a\u57fa\u790e\u304b\u3089\u7406\u89e3\u3059\u308b\u91cd\u8981\u6027<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u304a\u3051\u308b\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306e\u4f4d\u7f6e\u3065\u3051<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">Laravel Form\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u8ab2\u984c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">Laravel Form\u306e\u57fa\u672c\u5b9f\u88c5\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u30d5\u30a9\u30fc\u30e0\u306e\u57fa\u672c\u69cb\u9020\u3092\u4f5c\u6210\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-8\">CSRF\u30c8\u30fc\u30af\u30f3\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3092\u5b9f\u88c5\u3059\u308b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">\u5b9f\u8df5\u7684\u306a\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6a5f\u80fd\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-12\">\u975e\u540c\u671f\u901a\u4fe1\uff08Ajax\uff09\u3068\u306e\u9023\u643a\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-13\">\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306e\u5b9f\u73fe\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-14\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-15\">XSS\u653b\u6483\u304b\u3089\u306e\u9632\u5fa1\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-16\">CSRF\u30c8\u30fc\u30af\u30f3\u306e\u8a73\u7d30\u8a2d\u5b9a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u5165\u529b\u5024\u306e\u7121\u5bb3\u5316\u51e6\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-18\">Laravel Form\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b99\u9078<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-20\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5171\u901a\u5316\u3068\u518d\u5229\u7528<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-21\">\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u6226\u7565<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-22\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-23\">\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306e\u901f\u5ea6\u6539\u5584\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-24\">\u52b9\u7387\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u306e\u89e3\u8aac<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-25\">\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-26\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-27\">\u4f1a\u54e1\u767b\u9332\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-28\">\u554f\u3044\u5408\u308f\u305b\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-29\">\u5546\u54c1\u6ce8\u6587\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Laravel Form\u3068\u306f\uff1a\u57fa\u790e\u304b\u3089\u7406\u89e3\u3059\u308b\u91cd\u8981\u6027<\/h2>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306f\u6700\u3082\u91cd\u8981\u306a\u6a5f\u80fd\u306e\u4e00\u3064\u3067\u3059\u3002Laravel Form\u306f\u3001\u3053\u306e\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3092\u52b9\u7387\u7684\u304b\u3064\u5b89\u5168\u306b\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u30bb\u30c3\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001Laravel Form\u306e\u57fa\u790e\u304b\u3089\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u3001\u305d\u3057\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u307e\u3067\u3001\u5305\u62ec\u7684\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u304a\u3051\u308b\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306e\u4f4d\u7f6e\u3065\u3051<\/h3>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306f\u3001\u4ee5\u4e0b\u306e\u89b3\u70b9\u304b\u3089Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e2d\u6838\u3092\u62c5\u3046\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u306e\u5165\u308a\u53e3\u3068\u3057\u3066\u306e\u5f79\u5272<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u308b\u6700\u524d\u7dda<\/li>\n\n\n\n<li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30fc\u30bf\u30d5\u30ed\u30fc\u306e\u8d77\u70b9<\/li>\n\n\n\n<li>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u884c\u30c8\u30ea\u30ac\u30fc<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u8981\u6240<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>XSS\u653b\u6483\u3084CSRF\u653b\u6483\u306e\u4e3b\u8981\u306a\u30bf\u30fc\u30b2\u30c3\u30c8<\/li>\n\n\n\n<li>\u5165\u529b\u5024\u306e\u691c\u8a3c\u3068\u7121\u5bb3\u5316\u304c\u5fc5\u9808<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u3068\u306e\u5bc6\u63a5\u306a\u9023\u643a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u306e\u6c7a\u5b9a\u8981\u56e0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a9\u30fc\u30e0\u306e\u4f7f\u3044\u3084\u3059\u3055\u304cUX\u306b\u76f4\u7d50<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u9069\u5207\u306a\u5b9f\u88c5\u304c\u91cd\u8981<\/li>\n\n\n\n<li>\u30ec\u30b9\u30dd\u30f3\u30b9\u901f\u5ea6\u3078\u306e\u5f71\u97ff\u304c\u5927\u304d\u3044<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">Laravel Form\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u8ab2\u984c<\/h3>\n\n\n\n<p>Laravel Form\u306f\u3001\u5f93\u6765\u306e\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\u3067\u76f4\u9762\u3059\u308b\u4ee5\u4e0b\u306e\u8ab2\u984c\u3092\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. \u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5f93\u6765\u306e\u65b9\u6cd5\n&lt;form method=\"POST\" action=\"\/profile\"&gt;\n    &lt;input type=\"hidden\" name=\"_token\" value=\"&lt;?php echo csrf_token(); ?&gt;\"&gt;\n    &lt;!-- \u591a\u6570\u306e\u30d5\u30a9\u30fc\u30e0\u8981\u7d20\u3092\u624b\u52d5\u3067\u8a18\u8ff0 --&gt;\n&lt;\/form&gt;\n\n\/\/ Laravel Form\u4f7f\u7528\u6642\n{!! Form::open(['url' =&gt; 'profile']) !!}\n    \/\/ \u81ea\u52d5\u7684\u306bCSRF\u30c8\u30fc\u30af\u30f3\u304c\u8ffd\u52a0\u3055\u308c\u308b\n    \/\/ Form Builder\u306b\u3088\u308b\u52b9\u7387\u7684\u306a\u5b9f\u88c5\n{!! Form::close() !!}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u6a19\u6e96\u5316<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CSRF\u30c8\u30fc\u30af\u30f3<\/strong>\u306e\u81ea\u52d5\u751f\u6210\u3068\u691c\u8a3c<\/li>\n\n\n\n<li>\u5165\u529b\u5024\u306e<strong>\u30a8\u30b9\u30b1\u30fc\u30d7\u51e6\u7406<\/strong>\u306e\u81ea\u52d5\u5316<\/li>\n\n\n\n<li><strong>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/strong>\u30eb\u30fc\u30eb\u306e\u4e00\u5143\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">3. \u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/h4>\n\n\n<div id=\"id-3c8793d1-071a-4f09-a3c2-80ffa44ac106\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>Form Request<\/td><td>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30ed\u30b8\u30c3\u30af\u306e\u5206\u96e2<\/td><\/tr><tr><td>Validation Rules<\/td><td>\u30eb\u30fc\u30eb\u306e\u518d\u5229\u7528\u6027\u5411\u4e0a<\/td><\/tr><tr><td>Error Handling<\/td><td>\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u4e00\u8cab\u6027\u78ba\u4fdd<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>Laravel Form\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u8005\u306f\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u751f\u7523\u6027\u306e\u5411\u4e0a<\/strong>: \u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\u306e\u524a\u6e1b<\/li>\n\n\n\n<li><strong>\u54c1\u8cea\u306e\u78ba\u4fdd<\/strong>: \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u6a19\u6e96\u5316<\/li>\n\n\n\n<li><strong>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027<\/strong>: \u30b3\u30fc\u30c9\u306e\u4e00\u8cab\u6027\u3068\u53ef\u8aad\u6027\u306e\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u5b9f\u969b\u306b\u5b9f\u88c5\u3059\u308b\u624b\u9806\u306b\u3064\u3044\u3066\u3001\u5177\u4f53\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3092\u4ea4\u3048\u306a\u304c\u3089\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">Laravel Form\u306e\u57fa\u672c\u5b9f\u88c5\u624b\u9806<\/h2>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30e0\u6a5f\u80fd\u3092\u5b9f\u88c5\u3059\u308b\u969b\u306e\u57fa\u672c\u7684\u306a\u624b\u9806\u3092\u3001\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3068\u3068\u3082\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002\u521d\u3081\u3066Laravel Form\u3092\u4f7f\u7528\u3059\u308b\u65b9\u3067\u3082\u7406\u89e3\u3057\u3084\u3059\u3044\u3088\u3046\u3001\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u3067\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30d5\u30a9\u30fc\u30e0\u306e\u57fa\u672c\u69cb\u9020\u3092\u4f5c\u6210\u3059\u308b<\/h3>\n\n\n\n<p>\u307e\u305a\u3001Laravel Collective\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">composer require laravelcollective\/html<\/pre>\n\n\n\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u8ffd\u52a0\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/app.php\n'providers' =&gt; [\n    \/\/ ...\n    Collective\\Html\\HtmlServiceProvider::class,\n],\n\n'aliases' =&gt; [\n    \/\/ ...\n    'Form' =&gt; Collective\\Html\\FormFacade::class,\n    'Html' =&gt; Collective\\Html\\HtmlFacade::class,\n]<\/pre>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u30d5\u30a9\u30fc\u30e0\u69cb\u9020\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/views\/form.blade.php\n{!! Form::open(['url' =&gt; 'posts', 'method' =&gt; 'POST', 'files' =&gt; true]) !!}\n    &lt;div class=\"form-group\"&gt;\n        {!! Form::label('title', '\u30bf\u30a4\u30c8\u30eb') !!}\n        {!! Form::text('title', null, ['class' =&gt; 'form-control']) !!}\n    &lt;\/div&gt;\n\n    &lt;div class=\"form-group\"&gt;\n        {!! Form::label('content', '\u5185\u5bb9') !!}\n        {!! Form::textarea('content', null, ['class' =&gt; 'form-control']) !!}\n    &lt;\/div&gt;\n\n    {!! Form::submit('\u6295\u7a3f', ['class' =&gt; 'btn btn-primary']) !!}\n{!! Form::close() !!}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">CSRF\u30c8\u30fc\u30af\u30f3\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3059\u308b<\/h3>\n\n\n\n<p>Laravel\u306eCSRF\u4fdd\u8b77\u306f\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u5b9f\u88c5\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u78ba\u8a8d<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Kernel.php\nprotected $middlewareGroups = [\n    'web' =&gt; [\n        \\App\\Http\\Middleware\\VerifyCsrfToken::class,\n        \/\/ ...\n    ],\n];<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c8\u30fc\u30af\u30f3\u306e\u9664\u5916\u8a2d\u5b9a\uff08\u5fc5\u8981\u306a\u5834\u5408\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Middleware\/VerifyCsrfToken.php\nprotected $except = [\n    'payment\/*', \/\/ \u5916\u90e8\u6c7a\u6e08\u30b7\u30b9\u30c6\u30e0\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u306a\u3069\n    'api\/*',     \/\/ API \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\n];<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>JavaScript\u3067\u306e\u30c8\u30fc\u30af\u30f3\u53d6\u5f97<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ AJAX\u30ea\u30af\u30a8\u30b9\u30c8\u6642\u306e\u30c8\u30fc\u30af\u30f3\u8a2d\u5b9a\n$.ajaxSetup({\n    headers: {\n        'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n    }\n});<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3092\u5b9f\u88c5\u3059\u308b<\/h3>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30e0\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306f\u3001Form Request\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Requests\/PostRequest.php\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass PostRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true; \/\/ \u8a8d\u8a3c\u30c1\u30a7\u30c3\u30af\n    }\n\n    public function rules()\n    {\n        return [\n            'title' =&gt; 'required|max:255',\n            'content' =&gt; 'required|min:10',\n            'image' =&gt; 'image|max:2048', \/\/ 2MB\u5236\u9650\n        ];\n    }\n\n    public function messages()\n    {\n        return [\n            'title.required' =&gt; '\u30bf\u30a4\u30c8\u30eb\u306f\u5fc5\u9808\u3067\u3059',\n            'content.required' =&gt; '\u5185\u5bb9\u306f\u5fc5\u9808\u3067\u3059',\n            'content.min' =&gt; '\u5185\u5bb9\u306f10\u6587\u5b57\u4ee5\u4e0a\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n        ];\n    }\n}<\/pre>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Controllers\/PostController.php\npublic function store(PostRequest $request)\n{\n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u6e08\u307f\u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\n    $validated = $request-&gt;validated();\n\n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u4fdd\u5b58\u51e6\u7406\n    Post::create($validated);\n\n    return redirect()-&gt;route('posts.index')\n        -&gt;with('success', '\u6295\u7a3f\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f');\n}<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n<div id=\"id-310335ac-a01b-4154-8b34-16ab9864de9d\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9805\u76ee<\/th><th>\u63a8\u5968\u4e8b\u9805<\/th><\/tr><\/thead><tbody><tr><td>\u30d5\u30a9\u30fc\u30e0\u65b9\u5f0f<\/td><td>\u30de\u30eb\u30c1\u30d1\u30fc\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u4f7f\u7528\uff08\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5bfe\u5fdc\uff09<\/td><\/tr><tr><td>\u30a8\u30e9\u30fc\u8868\u793a<\/td><td>Blade\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3067\u306e\u4e00\u62ec\u8868\u793a<\/td><\/tr><tr><td>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/td><td>Form Request\u30af\u30e9\u30b9\u3067\u306e\u4e00\u5143\u7ba1\u7406<\/td><\/tr><tr><td>\u30ea\u30c0\u30a4\u30ec\u30af\u30c8<\/td><td>withInput()\u30e1\u30bd\u30c3\u30c9\u3067\u306e\u5165\u529b\u5024\u4fdd\u6301<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u4ee5\u4e0a\u306e\u57fa\u672c\u5b9f\u88c5\u3092\u571f\u53f0\u3068\u3057\u3066\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">\u5b9f\u8df5\u7684\u306a\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\u3092\u7406\u89e3\u3057\u305f\u3068\u3053\u308d\u3067\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u52d9\u3067\u3088\u304f\u5fc5\u8981\u3068\u306a\u308b\u9ad8\u5ea6\u306a\u5b9f\u88c5\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6a5f\u80fd\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u5b89\u5168\u304b\u3064\u52b9\u7387\u7684\u306b\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/filesystems.php \u3067\u306e\u8a2d\u5b9a\n'disks' =&gt; [\n    'public' =&gt; [\n        'driver' =&gt; 'local',\n        'root' =&gt; storage_path('app\/public'),\n        'url' =&gt; env('APP_URL').'\/storage',\n        'visibility' =&gt; 'public',\n    ],\n],<\/pre>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/views\/upload-form.blade.php\n{!! Form::open(['route' =&gt; 'files.store', 'files' =&gt; true, 'class' =&gt; 'dropzone']) !!}\n    &lt;div class=\"form-group\"&gt;\n        {!! Form::file('file', [\n            'class' =&gt; 'form-control',\n            'accept' =&gt; '.pdf,.doc,.docx,image\/*'\n        ]) !!}\n    &lt;\/div&gt;\n\n    \/\/ \u30d7\u30ed\u30b0\u30ec\u30b9\u30d0\u30fc\u306e\u5b9f\u88c5\n    &lt;div class=\"progress\"&gt;\n        &lt;div class=\"progress-bar\" role=\"progressbar\"&gt;&lt;\/div&gt;\n    &lt;\/div&gt;\n{!! Form::close() !!}<\/pre>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function store(Request $request)\n{\n    $request-&gt;validate([\n        'file' =&gt; 'required|file|max:10240|mimes:pdf,doc,docx,jpg,png'\n    ]);\n\n    try {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u5b58\u3068\u6700\u9069\u5316\n        $path = $request-&gt;file('file')-&gt;store('uploads', 'public');\n\n        \/\/ \u753b\u50cf\u306e\u5834\u5408\u306f\u30ea\u30b5\u30a4\u30ba\u51e6\u7406\n        if ($request-&gt;file('file')-&gt;isImage()) {\n            $image = Image::make(storage_path(\"app\/public\/{$path}\"));\n            $image-&gt;resize(800, null, function ($constraint) {\n                $constraint-&gt;aspectRatio();\n                $constraint-&gt;upsize();\n            });\n            $image-&gt;save();\n        }\n\n        return response()-&gt;json([\n            'success' =&gt; true,\n            'path' =&gt; $path\n        ]);\n    } catch (\\Exception $e) {\n        return response()-&gt;json([\n            'success' =&gt; false,\n            'message' =&gt; '\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f'\n        ], 500);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u975e\u540c\u671f\u901a\u4fe1\uff08Ajax\uff09\u3068\u306e\u9023\u643a\u624b\u6cd5<\/h3>\n\n\n\n<p>\u30e2\u30c0\u30f3\u306a\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306eAjax\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/js\/form-handler.js\nconst submitForm = async (formData) =&gt; {\n    try {\n        const response = await axios.post('\/api\/submit', formData, {\n            headers: {\n                'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]').content\n            },\n            onUploadProgress: (progressEvent) =&gt; {\n                const percentCompleted = Math.round(\n                    (progressEvent.loaded * 100) \/ progressEvent.total\n                );\n                updateProgressBar(percentCompleted);\n            }\n        });\n\n        handleSuccess(response.data);\n    } catch (error) {\n        handleError(error.response.data);\n    }\n};<\/pre>\n\n\n\n<p>Laravel\u3067\u306e\u975e\u540c\u671f\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Controllers\/ApiController.php\npublic function submit(Request $request)\n{\n    $validated = $request-&gt;validate([\n        'data' =&gt; 'required|array',\n        'files.*' =&gt; 'sometimes|file|max:5120'\n    ]);\n\n    return response()-&gt;json([\n        'message' =&gt; '\u6b63\u5e38\u306b\u51e6\u7406\u3055\u308c\u307e\u3057\u305f',\n        'data' =&gt; $processedData\n    ]);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306e\u5b9f\u73fe\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u56fd\u969b\u5316\uff08i18n\uff09\u5bfe\u5fdc\u306e\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/lang\/ja\/validation.php\nreturn [\n    'custom' =&gt; [\n        'email' =&gt; [\n            'required' =&gt; '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u5fc5\u9808\u3067\u3059',\n            'email' =&gt; '\u6709\u52b9\u306a\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n        ],\n    ],\n];\n\n\/\/ resources\/lang\/en\/validation.php\nreturn [\n    'custom' =&gt; [\n        'email' =&gt; [\n            'required' =&gt; 'The email field is required',\n            'email' =&gt; 'Please enter a valid email address',\n        ],\n    ],\n];<\/pre>\n\n\n\n<p>\u591a\u8a00\u8a9e\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/views\/multilingual-form.blade.php\n{!! Form::open(['route' =&gt; 'contact.store', 'method' =&gt; 'POST']) !!}\n    &lt;div class=\"form-group\"&gt;\n        {!! Form::label('name', __('forms.name')) !!}\n        {!! Form::text('name', null, [\n            'class' =&gt; 'form-control',\n            'placeholder' =&gt; __('forms.name_placeholder')\n        ]) !!}\n    &lt;\/div&gt;\n\n    @foreach(config('app.available_locales') as $locale)\n        &lt;div class=\"form-group\"&gt;\n            {!! Form::label(\"title_{$locale}\", __('forms.title').\" ({$locale})\") !!}\n            {!! Form::text(\"title_{$locale}\", null, ['class' =&gt; 'form-control']) !!}\n        &lt;\/div&gt;\n    @endforeach\n{!! Form::close() !!}<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n<div id=\"id-d7a2a07e-8d31-45e0-952c-cda27c3231a7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>\u5b9f\u88c5\u306e\u30dd\u30a4\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/td><td>\u2013 \u30c1\u30e3\u30f3\u30af\u5206\u5272\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<br>\u2013 \u30d7\u30ed\u30b0\u30ec\u30b9\u8868\u793a<br>\u2013 \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/td><\/tr><tr><td>Ajax\u901a\u4fe1<\/td><td>\u2013 \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<br>\u2013 \u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u8868\u793a<br>\u2013 \u5fdc\u7b54\u5f85\u3061\u5236\u5fa1<\/td><\/tr><tr><td>\u591a\u8a00\u8a9e\u5bfe\u5fdc<\/td><td>\u2013 \u7ffb\u8a33\u30d5\u30a1\u30a4\u30eb\u306e\u7ba1\u7406<br>\u2013 \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u8a2d\u5b9a<br>\u2013 \u52d5\u7684\u306a\u8a00\u8a9e\u5207\u308a\u66ff\u3048<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u4f7f\u3044\u3084\u3059\u304f\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30d5\u30a9\u30fc\u30e0\u6a5f\u80fd\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-14\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306b\u304a\u3051\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4fe1\u983c\u6027\u3092\u78ba\u4fdd\u3059\u308b\u4e0a\u3067\u6700\u3082\u91cd\u8981\u306a\u8981\u7d20\u306e\u4e00\u3064\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4e3b\u8981\u306a\u8106\u5f31\u6027\u3078\u306e\u5177\u4f53\u7684\u306a\u5bfe\u7b56\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">XSS\u653b\u6483\u304b\u3089\u306e\u9632\u5fa1\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30b9\u30af\u30ea\u30d7\u30c6\u30a3\u30f3\u30b0\uff08XSS\uff09\u653b\u6483\u304b\u3089\u5b88\u308b\u305f\u3081\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/session.php \u3067\u306e\u8a2d\u5b9a\n'cookie_httponly' =&gt; true,\n'cookie_secure' =&gt; env('SESSION_SECURE_COOKIE', true),\n'same_site' =&gt; 'lax',\n\n\/\/ Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u306e\u5b89\u5168\u306a\u51fa\u529b\n{{-- \u5371\u967a\u306a\u4f8b --}}\n{!! $userInput !!}  \/\/ \u30a8\u30b9\u30b1\u30fc\u30d7\u306a\u3057\u306e\u51fa\u529b\n\n{{-- \u5b89\u5168\u306a\u4f8b --}}\n{{ $userInput }}    \/\/ \u81ea\u52d5\u30a8\u30b9\u30b1\u30fc\u30d7\u3055\u308c\u308b<\/pre>\n\n\n\n<p>\u5165\u529b\u5024\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Middleware\/SanitizeInput.php\nnamespace App\\Http\\Middleware;\n\nclass SanitizeInput\n{\n    public function handle($request, \\Closure $next)\n    {\n        $input = $request-&gt;all();\n\n        array_walk_recursive($input, function(&amp;$value) {\n            \/\/ HTML\u30bf\u30b0\u306e\u9664\u53bb\n            $value = strip_tags($value);\n            \/\/ \u7279\u6b8a\u6587\u5b57\u306e\u30a8\u30b9\u30b1\u30fc\u30d7\n            $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');\n        });\n\n        $request-&gt;merge($input);\n        return $next($request);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">CSRF\u30c8\u30fc\u30af\u30f3\u306e\u8a73\u7d30\u8a2d\u5b9a<\/h3>\n\n\n\n<p>\u3088\u308a\u5805\u7262\u306aCSRF\u4fdd\u8b77\u306e\u5b9f\u88c5\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Middleware\/VerifyCsrfToken.php\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass VerifyCsrfToken extends Middleware\n{\n    protected $except = [\n        \/\/ CSRF\u30c1\u30a7\u30c3\u30af\u3092\u9664\u5916\u3059\u308bURL\n        'stripe\/*',\n        'webhook\/*'\n    ];\n\n    \/**\n     * CSRF \u30c8\u30fc\u30af\u30f3\u3068\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u691c\u8a3c\u3059\u308b\n     *\/\n    protected function tokensMatch($request)\n    {\n        $token = $request-&gt;input('_token') ?: $request-&gt;header('X-CSRF-TOKEN');\n\n        if (!$token &amp;&amp; $header = $request-&gt;header('X-XSRF-TOKEN')) {\n            $token = $this-&gt;encrypter-&gt;decrypt($header, static::serialized());\n        }\n\n        return is_string($token) &amp;&amp; \n               is_string($request-&gt;session()-&gt;token()) &amp;&amp;\n               hash_equals($request-&gt;session()-&gt;token(), $token);\n    }\n}<\/pre>\n\n\n\n<p>Ajax\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u306e\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ CSRF\u30c8\u30fc\u30af\u30f3\u306e\u81ea\u52d5\u8a2d\u5b9a\naxios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n\/\/ \u30c8\u30fc\u30af\u30f3\u306e\u5b9a\u671f\u7684\u306a\u66f4\u65b0\nsetInterval(() =&gt; {\n    axios.get('\/csrf-token\/refresh')\n        .then(response =&gt; {\n            document.querySelector('meta[name=\"csrf-token\"]').content = response.data.token;\n        });\n}, 3600000); \/\/ 1\u6642\u9593\u3054\u3068<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u5165\u529b\u5024\u306e\u7121\u5bb3\u5316\u51e6\u7406\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u5b89\u5168\u306a\u5165\u529b\u5024\u51e6\u7406\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Rules\/SafeHtml.php\nnamespace App\\Rules;\n\nuse Illuminate\\Contracts\\Validation\\Rule;\nuse HTMLPurifier;\nuse HTMLPurifier_Config;\n\nclass SafeHtml implements Rule\n{\n    private $purifier;\n\n    public function __construct()\n    {\n        $config = HTMLPurifier_Config::createDefault();\n        $config-&gt;set('HTML.Allowed', 'p,b,i,u,a[href],ul,ol,li');\n        $this-&gt;purifier = new HTMLPurifier($config);\n    }\n\n    public function passes($attribute, $value)\n    {\n        $cleaned = $this-&gt;purifier-&gt;purify($value);\n        return $cleaned === $value;\n    }\n\n    public function message()\n    {\n        return '\u5b89\u5168\u3067\u306a\u3044HTML\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002';\n    }\n}<\/pre>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n<div id=\"id-b06690be-73a3-416c-8267-0d15919387c5\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5bfe\u7b56\u9805\u76ee<\/th><th>\u5b9f\u88c5\u5185\u5bb9<\/th><\/tr><\/thead><tbody><tr><td>\u5165\u529b\u691c\u8a3c<\/td><td>\u2013 \u30c7\u30fc\u30bf\u578b\u306e\u78ba\u8a8d<br>\u2013 \u9577\u3055\u5236\u9650<br>\u2013 \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u691c\u8a3c<\/td><\/tr><tr><td>\u51fa\u529b\u30a8\u30b9\u30b1\u30fc\u30d7<\/td><td>\u2013 HTML\u30a8\u30b9\u30b1\u30fc\u30d7<br>\u2013 JavaScript\u30a8\u30b9\u30b1\u30fc\u30d7<br>\u2013 URL\u30a8\u30f3\u30b3\u30fc\u30c9<\/td><\/tr><tr><td>\u30bb\u30c3\u30b7\u30e7\u30f3\u4fdd\u8b77<\/td><td>\u2013 \u30bb\u30c3\u30b7\u30e7\u30f3ID\u518d\u751f\u6210<br>\u2013 Cookie\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<br>\u2013 \u30bb\u30c3\u30b7\u30e7\u30f3\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u691c\u8a3c\u306e\u591a\u5c64\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\uff08JavaScript\uff09<\/li>\n\n\n\n<li>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\uff08PHP\uff09<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\uff08\u5236\u7d04\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9069\u5207\u306a\u5236\u5fa1<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u672c\u756a\u74b0\u5883\u3067\u306e\u8a73\u7d30\u306a\u30a8\u30e9\u30fc\u60c5\u5831\u306e\u5236\u9650\n   config(['app.debug' =&gt; false]);\n\n   \/\/ \u30ab\u30b9\u30bf\u30e0\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n   public function render($request, Exception $exception)\n   {\n       if ($exception instanceof ValidationException) {\n           return response()-&gt;json([\n               'message' =&gt; '\u5165\u529b\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044',\n               'errors' =&gt; $exception-&gt;errors()\n           ], 422);\n       }\n\n       return parent::render($request, $exception);\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30d5\u30a1\u30a4\u30eb\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\n   $request-&gt;validate([\n       'file' =&gt; [\n           'required',\n           'file',\n           'mimes:pdf,doc,docx',\n           'max:10240',\n           new VirusScan(),  \/\/ \u30ab\u30b9\u30bf\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\n       ]\n   ]);<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u306a\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel\u30d5\u30a9\u30fc\u30e0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">Laravel Form\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b99\u9078<\/h2>\n\n\n\n<p>\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u30019\u3064\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u624b\u6cd5\u306f\u5b9f\u52d9\u3067\u306e\u7d4c\u9a13\u306b\u57fa\u3065\u3044\u3066\u304a\u308a\u3001\u30c1\u30fc\u30e0\u958b\u767a\u3067\u306e\u751f\u7523\u6027\u5411\u4e0a\u306b\u3082\u8ca2\u732e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30af\u30a8\u30b9\u30c8\u30af\u30e9\u30b9\u306e\u968e\u5c64\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Requests\/BaseFormRequest.php\nabstract class BaseFormRequest extends FormRequest\n{\n    protected function failedValidation(Validator $validator)\n    {\n        throw new ValidationException($validator, response()-&gt;json([\n            'message' =&gt; '\u5165\u529b\u5185\u5bb9\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059',\n            'errors' =&gt; $validator-&gt;errors()\n        ], 422));\n    }\n\n    protected function formatErrorMessages(array $errors): array\n    {\n        return array_map(function($error) {\n            return [\n                'message' =&gt; $error[0],\n                'code' =&gt; 'VALIDATION_ERROR'\n            ];\n        }, $errors);\n    }\n}\n\n\/\/ app\/Http\/Requests\/UserRegistrationRequest.php\nclass UserRegistrationRequest extends BaseFormRequest\n{\n    public function rules(): array\n    {\n        return [\n            'email' =&gt; ['required', 'email', 'unique:users'],\n            'password' =&gt; ['required', 'min:8', 'confirmed'],\n            'terms' =&gt; ['required', 'accepted']\n        ];\n    }\n\n    public function messages(): array\n    {\n        return [\n            'email.unique' =&gt; '\u3053\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059',\n            'password.min' =&gt; '\u30d1\u30b9\u30ef\u30fc\u30c9\u306f8\u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'\n        ];\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6761\u4ef6\u4ed8\u304d\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function rules(): array\n{\n    $rules = [\n        'name' =&gt; 'required|string|max:255',\n        'type' =&gt; 'required|in:individual,company'\n    ];\n\n    if ($this-&gt;input('type') === 'company') {\n        $rules['company_name'] = 'required|string|max:255';\n        $rules['registration_number'] = 'required|string|size:13';\n    }\n\n    return $rules;\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5171\u901a\u5316\u3068\u518d\u5229\u7528<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Rules\/StrongPassword.php\nclass StrongPassword implements Rule\n{\n    public function passes($attribute, $value): bool\n    {\n        \/\/ \u5c11\u306a\u304f\u3068\u30821\u3064\u306e\u5927\u6587\u5b57\u3001\u5c0f\u6587\u5b57\u3001\u6570\u5b57\u3001\u7279\u6b8a\u6587\u5b57\u3092\u542b\u3080\n        return preg_match('\/^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&amp;])[A-Za-z\\d@$!%*?&amp;]{8,}$\/', $value);\n    }\n\n    public function message(): string\n    {\n        return '\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5927\u6587\u5b57\u3001\u5c0f\u6587\u5b57\u3001\u6570\u5b57\u3001\u7279\u6b8a\u6587\u5b57\u3092\u542b\u3080\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059';\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u5171\u901a\u5b9a\u7fa9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Rules\/ValidationRules.php\nclass ValidationRules\n{\n    public static function phoneNumber(): array\n    {\n        return ['required', 'regex:\/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$\/'];\n    }\n\n    public static function postalCode(): array\n    {\n        return ['required', 'regex:\/^\\d{3}-\\d{4}$\/'];\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\npublic function rules(): array\n{\n    return [\n        'phone' =&gt; ValidationRules::phoneNumber(),\n        'postal_code' =&gt; ValidationRules::postalCode()\n    ];\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u6226\u7565<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/lang\/ja\/validation.php\nreturn [\n    'custom' =&gt; [\n        'email' =&gt; [\n            'required' =&gt; '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n            'email' =&gt; '\u6709\u52b9\u306a\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n            'unique' =&gt; '\u3053\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u65e2\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059'\n        ],\n        'password' =&gt; [\n            'min' =&gt; ':min\u6587\u5b57\u4ee5\u4e0a\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044',\n            'confirmed' =&gt; '\u30d1\u30b9\u30ef\u30fc\u30c9\u3068\u78ba\u8a8d\u7528\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\u3057\u307e\u305b\u3093'\n        ]\n    ]\n];<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u52d5\u7684\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u751f\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function messages(): array\n{\n    $maxFileSize = config('upload.max_size');\n\n    return [\n        'file.max' =&gt; \"\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306f{$maxFileSize}MB\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\",\n        'items.*.name.required' =&gt; ':index\u756a\u76ee\u306e\u9805\u76ee\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044'\n    ];\n}\n\nprotected function formatErrorMessage($message, $attribute, $rule, $parameters)\n{\n    return str_replace(\n        [':index'],\n        [intval(explode('.', $attribute)[1]) + 1],\n        $message\n    );\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u8868\u793a\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/views\/components\/form-error.blade.php\n@props(['name'])\n\n@error($name)\n    &lt;div class=\"error-message\"&gt;\n        &lt;svg class=\"error-icon\" viewBox=\"0 0 20 20\"&gt;\n            &lt;path d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM9 9V5h2v4h-2zm0 2h2v2H9v-2z\"\/&gt;\n        &lt;\/svg&gt;\n        &lt;span&gt;{{ $message }}&lt;\/span&gt;\n    &lt;\/div&gt;\n@enderror\n\n\/\/ \u4f7f\u7528\u4f8b\n&lt;x-form-error name=\"email\" \/&gt;<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30dd\u30a4\u30f3\u30c8\u4e00\u89a7\uff1a<\/p>\n\n\n<div id=\"id-bd846e3c-7e1a-4bf9-b68c-f42b8175337d\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u30ea\u30af\u30a8\u30b9\u30c8\u30af\u30e9\u30b9\u306e\u968e\u5c64\u5316<\/td><td>\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u5411\u4e0a\u3001\u4e00\u8cab\u6027\u306e\u78ba\u4fdd<\/td><\/tr><tr><td>\u6761\u4ef6\u4ed8\u304d\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/td><td>\u67d4\u8edf\u306a\u5165\u529b\u691c\u8a3c\u3001UX\u5411\u4e0a<\/td><\/tr><tr><td>\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30eb\u4f5c\u6210<\/td><td>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5206\u96e2\u3001\u518d\u5229\u7528\u6027<\/td><\/tr><tr><td>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u4e00\u5143\u7ba1\u7406<\/td><td>\u4fdd\u5b88\u6027\u5411\u4e0a\u3001\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306e\u5bb9\u6613\u3055<\/td><\/tr><tr><td>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u5316<\/td><td>UI\u4e00\u8cab\u6027\u3001\u958b\u767a\u52b9\u7387\u5411\u4e0a<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30d5\u30a9\u30fc\u30e0\u5b9f\u88c5\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-22\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/h2>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30c7\u30d0\u30c3\u30b0\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u54c1\u8cea\u3092\u5927\u304d\u304f\u5de6\u53f3\u3057\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u8df5\u7684\u306a\u6700\u9069\u5316\u624b\u6cd5\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306e\u901f\u5ea6\u6539\u5584\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u51e6\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Requests\/OptimizedFormRequest.php\nclass OptimizedFormRequest extends FormRequest\n{\n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n    private static $cachedRules = [];\n\n    public function rules()\n    {\n        $cacheKey = static::class . '_rules';\n\n        if (!isset(self::$cachedRules[$cacheKey])) {\n            self::$cachedRules[$cacheKey] = $this-&gt;generateRules();\n        }\n\n        return self::$cachedRules[$cacheKey];\n    }\n\n    \/\/ \u5fc5\u8981\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u307f\u3092\u5b9f\u884c\n    protected function failedValidation(Validator $validator)\n    {\n        $errors = $validator-&gt;errors()-&gt;all();\n        throw new ValidationException($validator, response()-&gt;json([\n            'message' =&gt; current($errors)\n        ], 422));\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/filesystems.php\n'disks' =&gt; [\n    'local' =&gt; [\n        'driver' =&gt; 'local',\n        'root' =&gt; storage_path('app'),\n        'cache' =&gt; [\n            'store' =&gt; 'redis',\n            'expire' =&gt; 600,\n            'prefix' =&gt; 'file_cache:'\n        ]\n    ]\n];\n\n\/\/ app\/Services\/FileUploadService.php\nclass FileUploadService\n{\n    public function handleUpload(UploadedFile $file)\n    {\n        \/\/ \u30c1\u30e3\u30f3\u30af\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u5b9f\u88c5\n        $chunk = $file-&gt;getStream()-&gt;read(1024 * 1024); \/\/ 1MB chunks\n        $path = $this-&gt;generateUniquePath($file);\n\n        while (!$file-&gt;getStream()-&gt;eof()) {\n            Storage::disk('local')-&gt;append($path, $chunk);\n            $chunk = $file-&gt;getStream()-&gt;read(1024 * 1024);\n        }\n\n        return $path;\n    }\n\n    \/\/ \u753b\u50cf\u6700\u9069\u5316\u51e6\u7406\n    public function optimizeImage($path)\n    {\n        $image = Image::make(storage_path(\"app\/{$path}\"));\n\n        \/\/ WebP\u5f62\u5f0f\u3078\u306e\u5909\u63db\n        if ($image-&gt;mime() !== 'image\/webp') {\n            $webpPath = preg_replace('\/\\.[^.]+$\/', '.webp', $path);\n            $image-&gt;save(storage_path(\"app\/{$webpPath}\"), 80, 'webp');\n            return $webpPath;\n        }\n\n        return $path;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u52b9\u7387\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u306e\u89e3\u8aac<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Providers\/AppServiceProvider.php\npublic function boot()\n{\n    if (config('app.debug')) {\n        DB::listen(function($query) {\n            Log::info(\n                $query-&gt;sql,\n                [\n                    'bindings' =&gt; $query-&gt;bindings,\n                    'time' =&gt; $query-&gt;time\n                ]\n            );\n        });\n    }\n}\n\n\/\/ \u30c7\u30d0\u30c3\u30b0\u7528\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\nclass DebugFormSubmission\n{\n    public function handle($request, Closure $next)\n    {\n        if (config('app.debug')) {\n            Log::debug('Form Submission', [\n                'url' =&gt; $request-&gt;fullUrl(),\n                'method' =&gt; $request-&gt;method(),\n                'inputs' =&gt; $request-&gt;except(['password', 'password_confirmation']),\n                'files' =&gt; $request-&gt;allFiles()\n            ]);\n        }\n\n        return $next($request);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30c8\u30ec\u30fc\u30b9\u6a5f\u80fd\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Exceptions\/Handler.php\npublic function render($request, Throwable $exception)\n{\n    if ($exception instanceof ValidationException) {\n        return $this-&gt;handleValidationException($exception);\n    }\n\n    if (config('app.debug')) {\n        return $this-&gt;renderDetailedError($exception);\n    }\n\n    return parent::render($request, $exception);\n}\n\nprotected function renderDetailedError($exception)\n{\n    return response()-&gt;json([\n        'message' =&gt; $exception-&gt;getMessage(),\n        'file' =&gt; $exception-&gt;getFile(),\n        'line' =&gt; $exception-&gt;getLine(),\n        'trace' =&gt; collect($exception-&gt;getTrace())\n            -&gt;map(function ($trace) {\n                return Arr::except($trace, ['args']);\n            })\n            -&gt;all()\n    ], 500);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h3>\n\n\n\n<p>\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n<div id=\"id-4681da38-8266-4c75-93ab-2cd32e6a38f7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u554f\u984c<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5897\u5927<\/td><td>\u2013 \u30d5\u30a1\u30a4\u30eb\u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406<br>\u2013 \u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<br>\u2013 \u4e0d\u8981\u306a\u30c7\u30fc\u30bf\u306e\u89e3\u653e<\/td><\/tr><tr><td>\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\u306e\u9045\u5ef6<\/td><td>\u2013 \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<br>\u2013 \u975e\u540c\u671f\u51e6\u7406\u306e\u5c0e\u5165<br>\u2013 N+1\u554f\u984c\u306e\u89e3\u6d88<\/td><\/tr><tr><td>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u91cd\u8907<\/td><td>\u2013 \u30eb\u30fc\u30eb\u306e\u5171\u901a\u5316<br>\u2013 \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<br>\u2013 \u6761\u4ef6\u4ed8\u304d\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Eager\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u6d3b\u7528\n$users = User::with(['profile', 'posts'])-&gt;get();\n\n\/\/ \u30af\u30a8\u30ea\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n$users = Cache::remember('users', 3600, function () {\n    return User::with(['profile'])-&gt;get();\n});<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u4ee3\u308f\u308a\u306b\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3092\u4f7f\u7528\nfunction getUsers()\n{\n    $users = User::cursor();\n    foreach ($users as $user) {\n        yield $user;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nforeach (getUsers() as $user) {\n    \/\/ \u30e1\u30e2\u30ea\u52b9\u7387\u306e\u826f\u3044\u51e6\u7406\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a9\u30fc\u30e0\u306e\u521d\u671f\u30c7\u30fc\u30bf\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\npublic function create()\n{\n    $formData = Cache::remember('form_initial_data', 3600, function () {\n        return [\n            'categories' =&gt; Category::all(),\n            'tags' =&gt; Tag::all(),\n            'settings' =&gt; Setting::getDefaults()\n        ];\n    });\n\n    return view('form.create', compact('formData'));\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u9ad8\u6027\u80fd\u3067\u5b89\u5b9a\u3057\u305f\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-26\">\u5b9f\u8df5\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u89e3\u8aac<\/h2>\n\n\n\n<p>\u5b9f\u52d9\u3067\u3088\u304f\u906d\u9047\u3059\u308b\u5177\u4f53\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u3064\u3044\u3066\u3001\u5b9f\u88c5\u4f8b\u3068\u3068\u3082\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u30b1\u30fc\u30b9\u3067\u3001\u3053\u308c\u307e\u3067\u306b\u8aac\u660e\u3057\u305f\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u9069\u7528\u3057\u305f\u5b9f\u88c5\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u4f1a\u54e1\u767b\u9332\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5b9a\u7fa9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Requests\/RegisterRequest.php\nclass RegisterRequest extends FormRequest\n{\n    public function rules(): array\n    {\n        return [\n            'name' =&gt; ['required', 'string', 'max:255'],\n            'email' =&gt; ['required', 'string', 'email', 'max:255', 'unique:users'],\n            'password' =&gt; ['required', 'string', 'min:8', 'confirmed', new StrongPassword],\n            'terms' =&gt; ['required', 'accepted'],\n            'profile_image' =&gt; ['nullable', 'image', 'max:2048']\n        ];\n    }\n\n    public function messages(): array\n    {\n        return [\n            'name.required' =&gt; '\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n            'email.unique' =&gt; '\u3053\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059',\n            'password.min' =&gt; '\u30d1\u30b9\u30ef\u30fc\u30c9\u306f8\u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n            'terms.accepted' =&gt; '\u5229\u7528\u898f\u7d04\u3078\u306e\u540c\u610f\u304c\u5fc5\u8981\u3067\u3059'\n        ];\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d3\u30e5\u30fc\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{{-- resources\/views\/auth\/register.blade.php --}}\n&lt;x-layout&gt;\n    {!! Form::open(['route' =&gt; 'register', 'method' =&gt; 'POST', 'files' =&gt; true, 'class' =&gt; 'space-y-6']) !!}\n        &lt;div class=\"form-group\"&gt;\n            {!! Form::label('name', '\u540d\u524d', ['class' =&gt; 'form-label']) !!}\n            {!! Form::text('name', null, [\n                'class' =&gt; 'form-input',\n                'required' =&gt; true,\n                'autocomplete' =&gt; 'name'\n            ]) !!}\n            &lt;x-form-error name=\"name\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"form-group\"&gt;\n            {!! Form::label('email', '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9', ['class' =&gt; 'form-label']) !!}\n            {!! Form::email('email', null, [\n                'class' =&gt; 'form-input',\n                'required' =&gt; true,\n                'autocomplete' =&gt; 'email'\n            ]) !!}\n            &lt;x-form-error name=\"email\" \/&gt;\n        &lt;\/div&gt;\n\n        {{-- \u30d1\u30b9\u30ef\u30fc\u30c9\u5165\u529b\u6b04\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u5316 --}}\n        &lt;x-password-input \/&gt;\n\n        &lt;div class=\"form-group\"&gt;\n            {!! Form::file('profile_image', [\n                'class' =&gt; 'form-file-input',\n                'accept' =&gt; 'image\/*'\n            ]) !!}\n            &lt;x-form-error name=\"profile_image\" \/&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"form-group\"&gt;\n            &lt;label class=\"flex items-center\"&gt;\n                {!! Form::checkbox('terms', '1', null, ['class' =&gt; 'form-checkbox']) !!}\n                &lt;span class=\"ml-2\"&gt;\n                    &lt;a href=\"{{ route('terms') }}\" target=\"_blank\"&gt;\u5229\u7528\u898f\u7d04&lt;\/a&gt;\u306b\u540c\u610f\u3059\u308b\n                &lt;\/span&gt;\n            &lt;\/label&gt;\n            &lt;x-form-error name=\"terms\" \/&gt;\n        &lt;\/div&gt;\n\n        {!! Form::submit('\u767b\u9332', ['class' =&gt; 'btn btn-primary w-full']) !!}\n    {!! Form::close() !!}\n&lt;\/x-layout&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u554f\u3044\u5408\u308f\u305b\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u975e\u540c\u671f\u51e6\u7406\u3092\u542b\u3080\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Controllers\/ContactController.php\nclass ContactController extends Controller\n{\n    public function store(ContactRequest $request)\n    {\n        $contact = Contact::create($request-&gt;validated());\n\n        \/\/ \u975e\u540c\u671f\u3067\u30e1\u30fc\u30eb\u9001\u4fe1\u3068Slack\u901a\u77e5\n        ContactNotificationJob::dispatch($contact);\n\n        return response()-&gt;json([\n            'message' =&gt; '\u304a\u554f\u3044\u5408\u308f\u305b\u3092\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f',\n            'contact_id' =&gt; $contact-&gt;id\n        ]);\n    }\n}\n\n\/\/ app\/Jobs\/ContactNotificationJob.php\nclass ContactNotificationJob implements ShouldQueue\n{\n    public function handle()\n    {\n        \/\/ \u7ba1\u7406\u8005\u3078\u306e\u30e1\u30fc\u30eb\u9001\u4fe1\n        Mail::to(config('mail.admin'))-&gt;send(new NewContactMail($this-&gt;contact));\n\n        \/\/ Slack\u901a\u77e5\n        Notification::route('slack', config('services.slack.webhook_url'))\n            -&gt;notify(new NewContactNotification($this-&gt;contact));\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ resources\/js\/contact-form.js\nconst submitForm = async (form) =&gt; {\n    try {\n        const response = await axios.post(form.action, new FormData(form));\n\n        showSuccess('\u304a\u554f\u3044\u5408\u308f\u305b\u3092\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f');\n        trackFormSubmission('contact', response.data.contact_id);\n        resetForm(form);\n\n    } catch (error) {\n        handleFormError(error);\n    }\n};\n\nconst handleFormError = (error) =&gt; {\n    if (error.response?.status === 422) {\n        showValidationErrors(error.response.data.errors);\n    } else {\n        showError('\u9001\u4fe1\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u6642\u9593\u3092\u304a\u3044\u3066\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002');\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">\u5546\u54c1\u6ce8\u6587\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8907\u6570\u30b9\u30c6\u30c3\u30d7\u30d5\u30a9\u30fc\u30e0\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Controllers\/OrderController.php\nclass OrderController extends Controller\n{\n    public function step1(OrderStep1Request $request)\n    {\n        $validatedData = $request-&gt;validated();\n        session(['order_step1' =&gt; $validatedData]);\n\n        return redirect()-&gt;route('order.step2');\n    }\n\n    public function step2(OrderStep2Request $request)\n    {\n        $step1Data = session('order_step1');\n        $validatedData = $request-&gt;validated();\n\n        DB::beginTransaction();\n        try {\n            $order = Order::create(array_merge($step1Data, $validatedData));\n            $this-&gt;processPayment($order);\n\n            DB::commit();\n            session()-&gt;forget(['order_step1']);\n\n            return redirect()-&gt;route('order.complete', $order);\n\n        } catch (\\Exception $e) {\n            DB::rollBack();\n            Log::error('Order processing failed', [\n                'error' =&gt; $e-&gt;getMessage(),\n                'data' =&gt; array_merge($step1Data, $validatedData)\n            ]);\n\n            return back()-&gt;withError('\u6ce8\u6587\u51e6\u7406\u306b\u5931\u6557\u3057\u307e\u3057\u305f');\n        }\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6ce8\u6587\u78ba\u8a8d\u753b\u9762\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{{-- resources\/views\/orders\/confirm.blade.php --}}\n&lt;x-layout&gt;\n    &lt;div class=\"order-summary\"&gt;\n        &lt;h2&gt;\u6ce8\u6587\u5185\u5bb9\u306e\u78ba\u8a8d&lt;\/h2&gt;\n\n        &lt;div class=\"order-items\"&gt;\n            @foreach($cart-&gt;items as $item)\n                &lt;div class=\"item-row\"&gt;\n                    &lt;span&gt;{{ $item-&gt;name }}&lt;\/span&gt;\n                    &lt;span&gt;{{ number_format($item-&gt;price) }}\u5186&lt;\/span&gt;\n                &lt;\/div&gt;\n            @endforeach\n        &lt;\/div&gt;\n\n        &lt;div class=\"order-total\"&gt;\n            &lt;span&gt;\u5408\u8a08\u91d1\u984d&lt;\/span&gt;\n            &lt;span&gt;{{ number_format($cart-&gt;total) }}\u5186&lt;\/span&gt;\n        &lt;\/div&gt;\n\n        {!! Form::open(['route' =&gt; 'order.process', 'method' =&gt; 'POST', 'id' =&gt; 'order-form']) !!}\n            &lt;div class=\"payment-section\"&gt;\n                &lt;h3&gt;\u304a\u652f\u6255\u3044\u65b9\u6cd5&lt;\/h3&gt;\n                @foreach($paymentMethods as $method)\n                    &lt;div class=\"payment-option\"&gt;\n                        {!! Form::radio('payment_method', $method-&gt;id) !!}\n                        &lt;label&gt;{{ $method-&gt;name }}&lt;\/label&gt;\n                    &lt;\/div&gt;\n                @endforeach\n            &lt;\/div&gt;\n\n            {!! Form::submit('\u6ce8\u6587\u3092\u78ba\u5b9a\u3059\u308b', [\n                'class' =&gt; 'btn btn-primary',\n                'data-confirm' =&gt; '\u6ce8\u6587\u3092\u78ba\u5b9a\u3057\u3066\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f'\n            ]) !!}\n        {!! Form::close() !!}\n    &lt;\/div&gt;\n&lt;\/x-layout&gt;<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30dd\u30a4\u30f3\u30c8\u4e00\u89a7\uff1a<\/p>\n\n\n<div id=\"id-41fc15b0-7fa8-460b-b48a-aec516b81159\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/th><th>\u91cd\u8981\u306a\u5b9f\u88c5\u30dd\u30a4\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u4f1a\u54e1\u767b\u9332<\/td><td>\u2013 \u5f37\u529b\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<br>\u2013 \u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc<br>\u2013 \u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf\u306e\u6700\u9069\u5316<\/td><\/tr><tr><td>\u554f\u3044\u5408\u308f\u305b<\/td><td>\u2013 \u975e\u540c\u671f\u51e6\u7406<br>\u2013 \u901a\u77e5\u306e\u7d71\u5408<br>\u2013 \u30b9\u30d1\u30e0\u5bfe\u7b56<\/td><\/tr><tr><td>\u5546\u54c1\u6ce8\u6587<\/td><td>\u2013 \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<br>\u2013 \u5728\u5eab\u78ba\u8a8d<br>\u2013 \u652f\u6255\u3044\u51e6\u7406\u306e\u7d71\u5408<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u52d9\u3067\u5fc5\u8981\u3068\u306a\u308b\u69d8\u3005\u306a\u8981\u4ef6\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u30d9\u30fc\u30b9\u3068\u306a\u308a\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u3001\u9069\u5207\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":{"0":"post-2602","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2602"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2602\/revisions"}],"predecessor-version":[{"id":2604,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2602\/revisions\/2604"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}