{"id":3187,"date":"2025-03-24T08:46:42","date_gmt":"2025-03-23T23:46:42","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3187"},"modified":"2025-03-24T08:47:12","modified_gmt":"2025-03-23T23:47:12","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91laravel%e3%81%aeroute%e3%83%91%e3%83%a9%e3%83%a1%e3%83%bc%e3%82%bf%e5%ae%8c%e5%85%a8%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%81%e5%9f%ba%e7%a4%8e","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3187","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Laravel\u306eRoute\u30d1\u30e9\u30e1\u30fc\u30bf\u5b8c\u5168\u30de\u30b9\u30bf\u30fc\uff01\u57fa\u790e\u304b\u3089\u5fdc\u7528\u307e\u306715\u306e\u5b9f\u8df5\u4f8b"},"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 \u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u306f\u4f55\u304b\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308a\u3084\u3059\u3044\u89e3\u8aac<\/a>      <\/li>      <li>        <a href=\"#i-2\">\u5fc5\u9808\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u4efb\u610f\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">\u6b63\u898f\u8868\u73fe\u306b\u3088\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">\u5b9f\u8df5\u3067\u4f7f\u3048\u308b\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5b9a\u7fa9\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">\u57fa\u672c\u7684\u306a\u5358\u4e00\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8a2d\u5b9a\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u8907\u6570\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u3067\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6271\u3046\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-21\">\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">\u30eb\u30fc\u30c8\u30e2\u30c7\u30eb\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u4f7f\u3044\u3053\u306a\u3059<\/a>      <\/li>      <li>        <a href=\"#i-25\">\u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3067\u67d4\u8edf\u306a\u5b9f\u88c5\u3092\u5b9f\u73fe<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-28\">\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u540d\u3067\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3059\u308b\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-32\">\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-33\">\u3088\u304f\u3042\u308b\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-36\">\u30d1\u30e9\u30e1\u30fc\u30bf\u51e6\u7406\u6642\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-40\">\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-44\">\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u3063\u305f\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-45\">REST API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-48\">\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30b5\u30a4\u30c8\u3067\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-51\">EC\u30b5\u30a4\u30c8\u306e\u5546\u54c1\u8a73\u7d30\u30da\u30fc\u30b8\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 \u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u306f\u4f55\u304b\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308a\u3084\u3059\u3044\u89e3\u8aac<\/h3>\n\n\n\n<p>Laravel\u306eRoute\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u52d5\u7684\u306aURL\u3092\u6271\u3046\u305f\u3081\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3059\u3002URL\u306e\u4e00\u90e8\u3092\u5909\u6570\u3068\u3057\u3066\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u3001\u305d\u306e\u5024\u3092\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3084\u30af\u30ed\u30fc\u30b8\u30e3\u30fc\u3067\u53d7\u3051\u53d6\u3063\u3066\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305f\u3068\u3048\u3070\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306aURL\u30d1\u30bf\u30fc\u30f3\u3092\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/users\/123<\/code> \u2013 \u30e6\u30fc\u30b6\u30fcID 123\u306e\u8a73\u7d30\u30da\u30fc\u30b8<\/li>\n\n\n\n<li><code>\/articles\/2024\/02<\/code> \u2013 2024\u5e742\u6708\u306e\u8a18\u4e8b\u4e00\u89a7<\/li>\n\n\n\n<li><code>\/products\/electronics\/laptop<\/code> \u2013 \u96fb\u5316\u88fd\u54c1\u30ab\u30c6\u30b4\u30ea\u30fc\u306e\u30ce\u30fc\u30c8PC\u4e00\u89a7<\/li>\n<\/ul>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\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=\"\">\/\/ \u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5b9a\u7fa9\nRoute::get('\/users\/{id}', function ($id) {\n    \/\/ $id\u306b123\u304c\u5165\u308b\uff08\/users\/123 \u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u5834\u5408\uff09\n    return '\u30e6\u30fc\u30b6\u30fcID: ' . $id;\n});\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u4f7f\u7528\nRoute::get('\/posts\/{id}', [PostController::class, 'show']);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5fc5\u9808\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u4efb\u610f\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. \u5fc5\u9808\u30d1\u30e9\u30e1\u30fc\u30bf<\/h4>\n\n\n\n<p>\u5fc5\u9808\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001URL\u306b\u5fc5\u305a\u542b\u307e\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u3044\u5024\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/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=\"\">\/\/ \u5fc5\u9808\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u4f8b\nRoute::get('\/users\/{id}', function ($id) {\n    return User::findOrFail($id);\n});<\/pre>\n\n\n\n<p>\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e2d\u62ec\u5f27<code>{}<\/code>\u3067\u56f2\u3093\u3067\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u7701\u7565\u3055\u308c\u305f\u5834\u5408\u306f404\u30a8\u30e9\u30fc<\/li>\n\n\n\n<li>\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u9806\u5e8f\u304c\u91cd\u8981<\/li>\n<\/ul>\n\n\n\n<p>\u4f7f\u7528\u3059\u3079\u304d\u5834\u9762\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u4e00\u610f\u8b58\u5225\u5b50\uff08ID\u3001\u30b9\u30e9\u30c3\u30b0\u306a\u3069\uff09<\/li>\n\n\n\n<li>\u5fc5\u9808\u306e\u691c\u7d22\u6761\u4ef6<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u306e\u968e\u5c64\u69cb\u9020\u3092\u8868\u73fe\u3059\u308b\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. \u4efb\u610f\u30d1\u30e9\u30e1\u30fc\u30bf<\/h4>\n\n\n\n<p>\u4efb\u610f\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001URL\u306b\u542b\u3081\u3066\u3082\u542b\u3081\u306a\u304f\u3066\u3082\u826f\u3044\u5024\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/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=\"\">\/\/ \u4efb\u610f\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u4f8b\nRoute::get('\/users\/{status?}', function ($status = 'active') {\n    return User::whereStatus($status)-&gt;get();\n});<\/pre>\n\n\n\n<p>\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e2d\u62ec\u5f27\u306e\u5f8c\u306b<code>?<\/code>\u3092\u4ed8\u3051\u3066\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u8a2d\u5b9a\u53ef\u80fd<\/li>\n\n\n\n<li>\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u7701\u7565\u3055\u308c\u305f\u5834\u5408\u3082\u30eb\u30fc\u30c8\u306f\u30de\u30c3\u30c1<\/li>\n<\/ul>\n\n\n\n<p>\u4f7f\u7528\u3059\u3079\u304d\u5834\u9762\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u6761\u4ef6<\/li>\n\n\n\n<li>\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u8868\u793a\u30aa\u30d7\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u6b63\u898f\u8868\u73fe\u306b\u3088\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u306f\u3001\u6b63\u898f\u8868\u73fe\u3092\u4f7f\u7528\u3057\u3066\u5024\u306e\u5f62\u5f0f\u3092\u5236\u7d04\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4e0d\u6b63\u306a\u5024\u304c\u6e21\u3055\u308c\u305f\u5834\u5408\u306b\u81ea\u52d5\u7684\u306b404\u30a8\u30e9\u30fc\u3092\u8fd4\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-6\">1. \u57fa\u672c\u7684\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/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=\"\">\/\/ \u6570\u5024\u306e\u307f\u3092\u53d7\u3051\u4ed8\u3051\u308b\nRoute::get('\/users\/{id}', function ($id) {\n    return User::findOrFail($id);\n})-&gt;where('id', '[0-9]+');\n\n\/\/ \u82f1\u6570\u5b57\u306e\u307f\u3092\u53d7\u3051\u4ed8\u3051\u308b\nRoute::get('\/articles\/{slug}', function ($slug) {\n    return Article::whereSlug($slug)-&gt;firstOrFail();\n})-&gt;where('slug', '[a-z0-9\\-]+');<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">2. \u8907\u6570\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/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=\"\">\/\/ \u8907\u6570\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u7570\u306a\u308b\u5236\u7d04\u3092\u8a2d\u5b9a\nRoute::get('\/posts\/{year}\/{month}', function ($year, $month) {\n    return Post::whereYear('created_at', $year)\n               -&gt;whereMonth('created_at', $month)\n               -&gt;get();\n})-&gt;where([\n    'year' =&gt; '2[0-9]{3}',\n    'month' =&gt; '0[1-9]|1[0-2]'\n]);<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">3. \u30b0\u30ed\u30fc\u30d0\u30eb\u30d1\u30bf\u30fc\u30f3\u5236\u7d04<\/h4>\n\n\n\n<p>\u7279\u5b9a\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u540d\u306b\u5bfe\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u5171\u901a\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002<\/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=\"\">\/\/ RouteServiceProvider\u306eboot()\u30e1\u30bd\u30c3\u30c9\u5185\u3067\u5b9a\u7fa9\npublic function boot()\n{\n    Route::pattern('id', '[0-9]+');\n    Route::pattern('slug', '[a-z0-9\\-]+');\n    Route::pattern('year', '2[0-9]{3}');\n    Route::pattern('month', '0[1-9]|1[0-2]');\n\n    parent::boot();\n}<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u3001\u53ef\u80fd\u306a\u9650\u308a\u53b3\u5bc6\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u5b9a\u7fa9\u3059\u308b<\/li>\n\n\n\n<li>\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\u3092\u4f5c\u6210\u3059\u308b<\/li>\n\n\n\n<li>\u5171\u901a\u306e\u30d1\u30bf\u30fc\u30f3\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u306b\u5b9a\u7fa9\u3059\u308b<\/li>\n\n\n\n<li>\u7279\u6b8a\u306a\u30b1\u30fc\u30b9\u306f\u500b\u5225\u306bwhere\u30e1\u30bd\u30c3\u30c9\u3067\u5bfe\u5fdc\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">\u5b9f\u8df5\u3067\u4f7f\u3048\u308b\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5b9a\u7fa9\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u57fa\u672c\u7684\u306a\u5358\u4e00\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8a2d\u5b9a\u624b\u9806<\/h3>\n\n\n\n<p>\u5358\u4e00\u306e\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u52b9\u679c\u7684\u306b\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u660e\u78ba\u306a\u547d\u540d\u898f\u5247\u3068\u9069\u5207\u306a\u578b\u306e\u8003\u616e\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-11\">\u57fa\u672c\u7684\u306a\u5b9a\u7fa9\u65b9\u6cd5<\/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=\"\">\/\/ \u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5b9a\u7fa9\nRoute::get('\/users\/{user_id}', [UserController::class, 'show']);\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u53d7\u3051\u53d6\u308a\u65b9\npublic function show($user_id)\n{\n    $user = User::findOrFail($user_id);\n    return view('users.show', compact('user'));\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">\u30d1\u30e9\u30e1\u30fc\u30bf\u540d\u306e\u547d\u540d\u898f\u5247<\/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=\"\">\/\/ \u63a8\u5968\u3055\u308c\u308b\u547d\u540d\u898f\u5247\u306e\u4f8b\nRoute::get('\/posts\/{post_id}', [PostController::class, 'show']);     \/\/ \u826f\u3044\u4f8b\uff1a\u660e\u78ba\u3067\u7406\u89e3\u3057\u3084\u3059\u3044\nRoute::get('\/articles\/{a}', [ArticleController::class, 'show']);     \/\/ \u60aa\u3044\u4f8b\uff1a\u610f\u5473\u304c\u4e0d\u660e\u78ba\n\n\/\/ \u8907\u6570\u5f62\u3068\u5358\u6570\u5f62\u306e\u4f7f\u3044\u5206\u3051\nRoute::get('\/categories\/{category}\/posts', [PostController::class, 'index']);  \/\/ \u89aa\u30ea\u30bd\u30fc\u30b9\u306f\u8907\u6570\u5f62\nRoute::get('\/user\/{id}\/profile', [ProfileController::class, 'show']);         \/\/ \u5358\u6570\u306e\u30ea\u30bd\u30fc\u30b9\u306f\u5358\u6570\u5f62<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u8907\u6570\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u8907\u6570\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u9806\u5e8f\u3068\u30c7\u30fc\u30bf\u306e\u95a2\u9023\u6027\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">\u968e\u5c64\u69cb\u9020\u3092\u6301\u3064\u30ea\u30bd\u30fc\u30b9\u306e\u5b9a\u7fa9<\/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=\"\">\/\/ \u968e\u5c64\u69cb\u9020\u3092\u6301\u3064\u30ea\u30bd\u30fc\u30b9\u306e\u30eb\u30fc\u30c8\u5b9a\u7fa9\nRoute::get('\/organizations\/{org_id}\/departments\/{dept_id}\/employees\/{emp_id}', \n    [EmployeeController::class, 'show']\n);\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u5b9f\u88c5\npublic function show($org_id, $dept_id, $emp_id)\n{\n    $employee = Employee::where('organization_id', $org_id)\n        -&gt;where('department_id', $dept_id)\n        -&gt;findOrFail($emp_id);\n\n    return view('employees.show', compact('employee'));\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u51e6\u7406<\/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=\"\">\/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u8003\u616e\u3057\u305f\u30eb\u30fc\u30c8\u5b9a\u7fa9\nRoute::get('\/courses\/{course_id}\/lessons\/{lesson_id}', function ($course_id, $lesson_id) {\n    \/\/ \u30ec\u30c3\u30b9\u30f3\u304c\u6307\u5b9a\u3055\u308c\u305f\u30b3\u30fc\u30b9\u306b\u5c5e\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d\n    $lesson = Lesson::where('course_id', $course_id)\n        -&gt;where('id', $lesson_id)\n        -&gt;firstOrFail();\n\n    return view('lessons.show', compact('lesson'));\n})-&gt;name('lessons.show');<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u3067\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6271\u3046\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001URL\u306e\u751f\u6210\u3084\u53c2\u7167\u304c\u5bb9\u6613\u306b\u306a\u308a\u3001\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">\u57fa\u672c\u7684\u306a\u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u306e\u5b9a\u7fa9<\/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=\"\">\/\/ \u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u306e\u5b9a\u7fa9\nRoute::get('\/users\/{id}', [UserController::class, 'show'])-&gt;name('users.show');\n\n\/\/ \u30d3\u30e5\u30fc\u3067\u306e\u4f7f\u7528\u4f8b\n&lt;a href=\"{{ route('users.show', ['id' =&gt; $user-&gt;id]) }}\"&gt;\n    {{ $user-&gt;name }}\u306e\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\n&lt;\/a&gt;<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">\u8907\u6570\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8<\/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=\"\">\/\/ \u8907\u6570\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u6301\u3064\u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u306e\u5b9a\u7fa9\nRoute::get('\/organizations\/{org}\/departments\/{dept}', [\n    DepartmentController::class, \n    'show'\n])-&gt;name('departments.show');\n\n\/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u914d\u5217\u306b\u3088\u308b\u6307\u5b9a\n$url = route('departments.show', ['org' =&gt; 1, 'dept' =&gt; 2]);\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\nreturn redirect()-&gt;route('departments.show', [\n    'org' =&gt; $organization-&gt;id,\n    'dept' =&gt; $department-&gt;id\n]);<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">URL\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30fc\u306e\u6d3b\u7528<\/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=\"\">\/\/ URL\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u30fc\u3092\u4f7f\u7528\u3057\u305f\u52d5\u7684\u306aURL\u751f\u6210\nclass DepartmentController extends Controller\n{\n    public function update(Request $request, $org_id, $dept_id)\n    {\n        \/\/ \u51e6\u7406\u306e\u5b9f\u884c\n        $department-&gt;update($request-&gt;validated());\n\n        \/\/ \u6210\u529f\u6642\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\uff08\u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30c3\u30bb\u30fc\u30b8\u4ed8\u304d\uff09\n        return redirect()-&gt;route('departments.show', [\n            'org' =&gt; $org_id,\n            'dept' =&gt; $dept_id\n        ])-&gt;with('success', '\u90e8\u7f72\u60c5\u5831\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f');\n    }\n\n    public function delete($org_id, $dept_id)\n    {\n        \/\/ \u524a\u9664\u51e6\u7406\n\n        \/\/ \u89aa\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\n        return redirect()-&gt;route('organizations.departments.index', [\n            'org' =&gt; $org_id\n        ])-&gt;with('success', '\u90e8\u7f72\u3092\u524a\u9664\u3057\u307e\u3057\u305f');\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-20\">\u6761\u4ef6\u4ed8\u304d\u306eURL\u751f\u6210<\/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=\"\">\/\/ \u6761\u4ef6\u306b\u5fdc\u3058\u3066\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8ffd\u52a0\n$routeParams = [\n    'org' =&gt; $organization-&gt;id,\n    'dept' =&gt; $department-&gt;id\n];\n\nif ($request-&gt;has('sort')) {\n    $routeParams['sort'] = $request-&gt;sort;\n}\n\nreturn redirect()-&gt;route('departments.show', $routeParams);<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u62e1\u5f35\u6027\u306e\u3042\u308b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u8a08\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\u3092\u7a4d\u6975\u7684\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001URL\u306e\u5909\u66f4\u306b\u5f37\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30eb\u30fc\u30c8\u30e2\u30c7\u30eb\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u4f7f\u3044\u3053\u306a\u3059<\/h3>\n\n\n\n<p>\u30eb\u30fc\u30c8\u30e2\u30c7\u30eb\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u306f\u3001\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u304b\u3089\u81ea\u52d5\u7684\u306b\u30e2\u30c7\u30eb\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u53d6\u5f97\u3059\u308b\u6a5f\u80fd\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30b3\u30fc\u30c9\u306e\u7c21\u6f54\u3055\u3068\u53ef\u8aad\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">\u6697\u9ed9\u7684\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/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=\"\">\/\/ \u6697\u9ed9\u7684\u306a\u30eb\u30fc\u30c8\u30e2\u30c7\u30eb\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\nRoute::get('\/users\/{user}', function (User $user) {\n    \/\/ $user\u306f\u81ea\u52d5\u7684\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u3055\u308c\u305f\n    \/\/ User\u30e2\u30c7\u30eb\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\n    return view('users.profile', compact('user'));\n});\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u4f7f\u7528\u4f8b\nclass UserController extends Controller\n{\n    public function show(User $user)\n    {\n        \/\/ findOrFail\u3092\u66f8\u304f\u5fc5\u8981\u304c\u306a\u3044\n        return view('users.show', compact('user'));\n    }\n\n    public function update(Request $request, User $user)\n    {\n        $user-&gt;update($request-&gt;validated());\n        return redirect()-&gt;route('users.show', $user);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u306b\u3088\u308b\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/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=\"\">\/\/ \u30e2\u30c7\u30eb\u3067\u306e\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u6307\u5b9a\nclass User extends Model\n{\n    \/**\n     * \u30eb\u30fc\u30c8\u30e2\u30c7\u30eb\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3067\u4f7f\u7528\u3059\u308b\u30ad\u30fc\u3092\u53d6\u5f97\n     *\/\n    public function getRouteKeyName()\n    {\n        return 'username'; \/\/ id\u306e\u4ee3\u308f\u308a\u306busername\u30ab\u30e9\u30e0\u3092\u4f7f\u7528\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3067\u67d4\u8edf\u306a\u5b9f\u88c5\u3092\u5b9f\u73fe<\/h3>\n\n\n\n<p>\u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u89aa\u5b50\u95a2\u4fc2\u306e\u3042\u308b\u30ea\u30bd\u30fc\u30b9\u3092\u52b9\u7387\u7684\u306b\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">\u57fa\u672c\u7684\u306a\u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/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=\"\">\/\/ \u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u306e\u5b9a\u7fa9\nRoute::get('\/users\/{user}\/posts\/{post}', function (User $user, Post $post) {\n    \/\/ $post\u306f\u81ea\u52d5\u7684\u306b$user\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u3082\u306e\u3060\u3051\u306b\u5236\u9650\u3055\u308c\u308b\n    return view('posts.show', compact('user', 'post'));\n})-&gt;scopeBindings();\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u5b9f\u88c5\u4f8b\nclass PostController extends Controller\n{\n    public function show(User $user, Post $post)\n    {\n        \/\/ $post\u306f\u65e2\u306b$user\u306b\u7d10\u3065\u3044\u3066\u3044\u308b\u3082\u306e\u3060\u3051\u304c\u53d6\u5f97\u3055\u308c\u308b\n        \/\/ \u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u6295\u7a3f\u306f404\u30a8\u30e9\u30fc\u306b\u306a\u308b\n        return view('posts.show', compact('user', 'post'));\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">\u8907\u6570\u968e\u5c64\u306e\u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/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=\"\">\/\/ 3\u968e\u5c64\u306e\u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\nRoute::get('\/organizations\/{organization}\/departments\/{department}\/employees\/{employee}', \n    [EmployeeController::class, 'show']\n)-&gt;scopeBindings();\n\n\/\/ \u30e2\u30c7\u30eb\u3067\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u5b9a\u7fa9\nclass Organization extends Model\n{\n    public function departments()\n    {\n        return $this-&gt;hasMany(Department::class);\n    }\n}\n\nclass Department extends Model\n{\n    public function employees()\n    {\n        return $this-&gt;hasMany(Employee::class);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u540d\u3067\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3059\u308b\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u7279\u5b9a\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u3001\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u305f\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u30e2\u30c7\u30eb\u3067\u306e\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u5b9f\u88c5<\/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=\"\">class Product extends Model\n{\n    \/\/ \u30b9\u30e9\u30c3\u30b0\u3092\u4f7f\u7528\u3057\u305f\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\n    public function getRouteKeyName()\n    {\n        return 'slug';\n    }\n\n    \/\/ \u3088\u308a\u8907\u96d1\u306a\u30ab\u30b9\u30bf\u30e0\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u30ed\u30b8\u30c3\u30af\n    public function resolveRouteBinding($value, $field = null)\n    {\n        return $this-&gt;where('slug', $value)\n            -&gt;where('is_active', true)\n            -&gt;firstOrFail();\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u3067\u306e\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u6307\u5b9a<\/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=\"\">\/\/ \u30eb\u30fc\u30c8\u3054\u3068\u306b\u7570\u306a\u308b\u30ad\u30fc\u3092\u4f7f\u7528\nRoute::get('\/users\/{user:username}', function (User $user) {\n    return view('users.profile', compact('user'));\n});\n\nRoute::get('\/organizations\/{organization:code}', function (Organization $organization) {\n    return view('organizations.show', compact('organization'));\n});<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">\u9ad8\u5ea6\u306a\u30ab\u30b9\u30bf\u30e0\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/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=\"\">\/\/ RouteServiceProvider\u3067\u306e\u30ab\u30b9\u30bf\u30e0\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u5b9a\u7fa9\npublic function boot()\n{\n    parent::boot();\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u306e\u767b\u9332\n    Route::bind('user', function ($value) {\n        return User::where('username', $value)\n            -&gt;where('status', 'active')\n            -&gt;firstOrFail();\n    });\n\n    \/\/ \u8907\u5408\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u305f\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\n    Route::bind('product', function ($value) {\n        return Product::where('sku', $value)\n            -&gt;orWhere('slug', $value)\n            -&gt;orWhere('id', $value)\n            -&gt;firstOrFail();\n    });\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nRoute::get('\/users\/{user}', function (User $user) {\n    \/\/ $user\u306f'active'\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u307f\n    return view('users.show', compact('user'));\n});<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u67d4\u8edf\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u5b9f\u88c5\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u9069\u5207\u306a\u30b9\u30b3\u30fc\u30d7\u4ed8\u304d\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3068\u30ab\u30b9\u30bf\u30e0\u30ad\u30fc\u306e\u4f7f\u7528\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-32\">\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-33\">\u3088\u304f\u3042\u308b\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">1. 404\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u5834\u5408\u306e\u4e3b\u306a\u539f\u56e0\u3068\u5bfe\u51e6\u6cd5<\/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=\"\">\/\/ \u3088\u304f\u3042\u308b\u554f\u984c\u30d1\u30bf\u30fc\u30f31: \u30eb\u30fc\u30c8\u306e\u9806\u5e8f\u304c\u6b63\u3057\u304f\u306a\u3044\n\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\nRoute::get('\/posts\/{slug}', [PostController::class, 'show']);\nRoute::get('\/posts\/create', [PostController::class, 'create']); \/\/ \u3053\u306e\u30eb\u30fc\u30c8\u306f\u5230\u9054\u4e0d\u80fd\n\n\/\/ \u6b63\u3057\u3044\u5b9f\u88c5\nRoute::get('\/posts\/create', [PostController::class, 'create']); \/\/ \u5177\u4f53\u7684\u306a\u30eb\u30fc\u30c8\u3092\u5148\u306b\nRoute::get('\/posts\/{slug}', [PostController::class, 'show']);   \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u542b\u3080\u30eb\u30fc\u30c8\u3092\u5f8c\u306b<\/pre>\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=\"\">\/\/ \u3088\u304f\u3042\u308b\u554f\u984c\u30d1\u30bf\u30fc\u30f32: \u30e2\u30c7\u30eb\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u306e\u30ad\u30fc\u304c\u4e00\u81f4\u3057\u306a\u3044\n\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\nRoute::get('\/users\/{user:username}', function (User $user) {\n    return $user;\n}); \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306busername\u30ab\u30e9\u30e0\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306b404\n\n\/\/ \u89e3\u6c7a\u7b561: \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u30ab\u30e9\u30e0\u3092\u8ffd\u52a0\npublic function up()\n{\n    Schema::table('users', function (Blueprint $table) {\n        $table-&gt;string('username')-&gt;unique()-&gt;after('name');\n    });\n}\n\n\/\/ \u89e3\u6c7a\u7b562: getRouteKeyName\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\nclass User extends Model\n{\n    public function getRouteKeyName()\n    {\n        return 'username';\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">2. \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u578b\u4e0d\u4e00\u81f4\u306b\u3088\u308b\u30a8\u30e9\u30fc<\/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=\"\">\/\/ \u3088\u304f\u3042\u308b\u554f\u984c\u30d1\u30bf\u30fc\u30f33: \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u578b\u5909\u63db\u304c\u5fc5\u8981\u306a\u5834\u5408\n\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\npublic function show($id)\n{\n    return Product::where('id', $id)  \/\/ \u6587\u5b57\u5217\u3068\u3057\u3066\u6bd4\u8f03\u3055\u308c\u308b\u53ef\u80fd\u6027\n        -&gt;firstOrFail();\n}\n\n\/\/ \u89e3\u6c7a\u7b56: \u660e\u793a\u7684\u306a\u578b\u30ad\u30e3\u30b9\u30c8\u307e\u305f\u306f\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\npublic function show($id)\n{\n    $id = (int) $id;  \/\/ \u660e\u793a\u7684\u306b\u6574\u6570\u306b\u5909\u63db\n    return Product::findOrFail($id);\n}\n\n\/\/ \u307e\u305f\u306f\u3001\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u5236\u7d04\u3092\u4f7f\u7528\nRoute::get('\/products\/{id}', [ProductController::class, 'show'])\n    -&gt;where('id', '[0-9]+');<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-36\">\u30d1\u30e9\u30e1\u30fc\u30bf\u51e6\u7406\u6642\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">1. SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/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=\"\">\/\/ \u5371\u967a\u306a\u5b9f\u88c5\nRoute::get('\/search\/{query}', function ($query) {\n    return DB::select(\"SELECT * FROM products WHERE name LIKE '%$query%'\");  \/\/ SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306e\u5371\u967a\u6027\n});\n\n\/\/ \u5b89\u5168\u306a\u5b9f\u88c5\nRoute::get('\/search\/{query}', function ($query) {\n    \/\/ \u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u3092\u4f7f\u7528\n    return Product::where('name', 'LIKE', '%' . addslashes($query) . '%')-&gt;get();\n\n    \/\/ \u307e\u305f\u306f\u3001\u30d7\u30ea\u30da\u30a2\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\n    return DB::select('SELECT * FROM products WHERE name LIKE ?', ['%' . $query . '%']);\n});<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">2. XSS\u5bfe\u7b56<\/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=\"\">\/\/ \u5371\u967a\u306a\u5b9f\u88c5\nRoute::get('\/profile\/{username}', function ($username) {\n    return view('profile')-&gt;with('username', $username);  \/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u30a8\u30b9\u30b1\u30fc\u30d7\u305b\u305a\u306b\u51fa\u529b\n});\n\n\/\/ \u5b89\u5168\u306a\u5b9f\u88c5\n\/\/ Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u306e\u51fa\u529b\n&lt;h1&gt;{{ $username }}&lt;\/h1&gt;  \/\/ \u81ea\u52d5\u3067\u30a8\u30b9\u30b1\u30fc\u30d7\u3055\u308c\u308b\n{!! $username !!}         \/\/ \u30a8\u30b9\u30b1\u30fc\u30d7\u305b\u305a\u306b\u51fa\u529b\uff08\u5fc5\u8981\u306a\u5834\u5408\u306e\u307f\u4f7f\u7528\uff09\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u5b9f\u88c5\npublic function show($username)\n{\n    $username = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');\n    return view('profile', compact('username'));\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">3. \u30bb\u30c3\u30b7\u30e7\u30f3\u56fa\u5b9a\u653b\u6483\u5bfe\u7b56<\/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=\"\">\/\/ \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u5f8c\u306b\u30bb\u30c3\u30b7\u30e7\u30f3ID\u3092\u518d\u751f\u6210\nRoute::post('\/login', function (Request $request) {\n    \/\/ \u8a8d\u8a3c\u51e6\u7406\n    if (Auth::attempt($credentials)) {\n        $request-&gt;session()-&gt;regenerate();  \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3ID\u3092\u518d\u751f\u6210\n        return redirect()-&gt;intended('dashboard');\n    }\n});<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-40\">\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">1. \u30eb\u30fc\u30c8\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u3068\u540d\u524d\u7a7a\u9593\u306e\u6d3b\u7528<\/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=\"\">\/\/ routes\/web.php\nRoute::prefix('admin')\n    -&gt;name('admin.')\n    -&gt;middleware(['auth', 'admin'])\n    -&gt;group(function () {\n        Route::prefix('users')-&gt;group(function () {\n            Route::get('\/', [AdminUserController::class, 'index'])-&gt;name('users.index');\n            Route::get('\/{user}', [AdminUserController::class, 'show'])-&gt;name('users.show');\n            Route::put('\/{user}', [AdminUserController::class, 'update'])-&gt;name('users.update');\n        });\n\n        Route::prefix('products')-&gt;group(function () {\n            Route::get('\/', [AdminProductController::class, 'index'])-&gt;name('products.index');\n            Route::get('\/{product}', [AdminProductController::class, 'show'])-&gt;name('products.show');\n        });\n    });<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">2. \u30eb\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u5272\u3068\u69cb\u9020\u5316<\/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=\"\">\/\/ routes\/web.php\nrequire __DIR__.'\/web\/auth.php';\nrequire __DIR__.'\/web\/admin.php';\nrequire __DIR__.'\/web\/api.php';\n\n\/\/ routes\/web\/admin.php\nRoute::prefix('admin')-&gt;group(function () {\n    require __DIR__.'\/admin\/users.php';\n    require __DIR__.'\/admin\/products.php';\n    require __DIR__.'\/admin\/orders.php';\n});<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-43\">3. \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/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=\"\"># \u30eb\u30fc\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u751f\u6210\uff08\u672c\u756a\u74b0\u5883\u3067\u63a8\u5968\uff09\nphp artisan route:cache\n\n# \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\nphp artisan route:clear<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6ce8\u610f\u70b9\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u610f\u8b58\u3059\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u5b9f\u88c5\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u9069\u5207\u306a\u30b0\u30eb\u30fc\u30d7\u5316\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-44\">\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u3063\u305f\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-45\">REST API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>REST API\u3067\u306f\u3001\u30ea\u30bd\u30fc\u30b9\u306e\u4e00\u610f\u306a\u8b58\u5225\u3068HTTP\u30e1\u30bd\u30c3\u30c9\u306e\u9069\u5207\u306a\u4f7f\u7528\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">\u57fa\u672c\u7684\u306aRESTful API\u306e\u5b9f\u88c5<\/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=\"\">\/\/ routes\/api.php\nRoute::prefix('v1')-&gt;group(function () {\n    \/\/ \u30ea\u30bd\u30fc\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306b\u3088\u308bRESTful API\u5b9f\u88c5\n    Route::apiResource('products', ProductApiController::class);\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u8ffd\u52a0\n    Route::post('products\/{product}\/publish', [ProductApiController::class, 'publish']);\n    Route::post('products\/{product}\/unpublish', [ProductApiController::class, 'unpublish']);\n});\n\n\/\/ app\/Http\/Controllers\/Api\/ProductApiController.php\nclass ProductApiController extends Controller\n{\n    public function index()\n    {\n        return ProductResource::collection(\n            Product::paginate(20)\n        );\n    }\n\n    public function show(Product $product)\n    {\n        return new ProductResource($product-&gt;load(['category', 'tags']));\n    }\n\n    public function store(ProductRequest $request)\n    {\n        $product = Product::create($request-&gt;validated());\n        return new ProductResource($product);\n    }\n\n    public function update(ProductRequest $request, Product $product)\n    {\n        $product-&gt;update($request-&gt;validated());\n        return new ProductResource($product);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">API\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u6d3b\u7528<\/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=\"\">\/\/ routes\/api.php\nRoute::prefix('v1')-&gt;group(function () {\n    Route::get('products\/{product}\/variants\/{variant}', [\n        ProductVariantController::class, \n        'show'\n    ])-&gt;scopeBindings();\n\n    Route::get('orders\/{order}\/items\/{item}', [\n        OrderItemController::class, \n        'show'\n    ])-&gt;scopeBindings();\n});\n\n\/\/ app\/Http\/Controllers\/Api\/ProductVariantController.php\nclass ProductVariantController extends Controller\n{\n    public function show(Product $product, Variant $variant)\n    {\n        \/\/ \u30b9\u30b3\u30fc\u30d7\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u306b\u3088\u308a\u3001\u88fd\u54c1\u306b\u7d10\u3065\u304f\u30d0\u30ea\u30a2\u30f3\u30c8\u306e\u307f\u304c\u53d6\u5f97\u3055\u308c\u308b\n        return new VariantResource($variant-&gt;load('specifications'));\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30b5\u30a4\u30c8\u3067\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>\u591a\u8a00\u8a9e\u30b5\u30a4\u30c8\u3067\u306f\u3001\u8a00\u8a9e\u30b3\u30fc\u30c9\u3092\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u6d3b\u7528\u3057\u3001\u67d4\u8edf\u306a\u8a00\u8a9e\u5207\u308a\u66ff\u3048\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-49\">\u8a00\u8a9e\u5207\u308a\u66ff\u3048\u6a5f\u80fd\u306e\u5b9f\u88c5<\/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=\"\">\/\/ routes\/web.php\nRoute::get('\/', function () {\n    return redirect('\/' . app()-&gt;getLocale());\n});\n\nRoute::prefix('{locale}')\n    -&gt;where(['locale' =&gt; '[a-z]{2}'])\n    -&gt;middleware('setlocale')\n    -&gt;group(function () {\n        Route::get('\/', [HomeController::class, 'index'])-&gt;name('home');\n        Route::get('\/about', [PageController::class, 'about'])-&gt;name('about');\n        Route::get('\/contact', [PageController::class, 'contact'])-&gt;name('contact');\n    });\n\n\/\/ app\/Http\/Middleware\/SetLocale.php\nclass SetLocale\n{\n    public function handle($request, Closure $next)\n    {\n        $locale = $request-&gt;segment(1);\n        if (in_array($locale, config('app.available_locales'))) {\n            app()-&gt;setLocale($locale);\n        }\n        return $next($request);\n    }\n}\n\n\/\/ \u30ea\u30f3\u30af\u751f\u6210\u30d8\u30eb\u30d1\u30fc\nfunction localizedRoute($name, $parameters = [], $locale = null)\n{\n    $locale = $locale ?? app()-&gt;getLocale();\n    return route($name, array_merge(['locale' =&gt; $locale], $parameters));\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">\u591a\u8a00\u8a9e\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u52d5\u7684\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/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=\"\">\/\/ routes\/web.php\nRoute::prefix('{locale}')-&gt;group(function () {\n    Route::get('articles\/{slug}', [ArticleController::class, 'show'])\n        -&gt;name('articles.show');\n});\n\n\/\/ app\/Models\/Article.php\nclass Article extends Model\n{\n    public function resolveRouteBinding($value, $field = null)\n    {\n        return $this-&gt;where('slug-&gt;' . app()-&gt;getLocale(), $value)\n            -&gt;firstOrFail();\n    }\n}\n\n\/\/ Blade\u3067\u306e\u30ea\u30f3\u30af\u751f\u6210\n&lt;a href=\"{{ localizedRoute('articles.show', ['slug' =&gt; $article-&gt;getTranslation('slug', app()-&gt;getLocale())]) }}\"&gt;\n    {{ $article-&gt;title }}\n&lt;\/a&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-51\">EC\u30b5\u30a4\u30c8\u306e\u5546\u54c1\u8a73\u7d30\u30da\u30fc\u30b8\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>EC\u30b5\u30a4\u30c8\u3067\u306f\u3001\u5546\u54c1\u30ab\u30c6\u30b4\u30ea\u3084\u5546\u54c1\u8a73\u7d30\u306a\u3069\u3001\u968e\u5c64\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">\u30ab\u30c6\u30b4\u30ea\u3068\u5546\u54c1\u306e\u968e\u5c64\u7684\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/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=\"\">\/\/ routes\/web.php\nRoute::get('shop\/{category}\/{subcategory?}', [\n    CategoryController::class, \n    'show'\n])-&gt;name('category.show');\n\nRoute::get('shop\/{category}\/{subcategory}\/{product:slug}', [\n    ProductController::class, \n    'show'\n])-&gt;name('product.show');\n\n\/\/ app\/Http\/Controllers\/ProductController.php\nclass ProductController extends Controller\n{\n    public function show(Category $category, $subcategory, Product $product)\n    {\n        abort_if($product-&gt;category_id !== $category-&gt;id, 404);\n\n        return view('products.show', [\n            'category' =&gt; $category,\n            'subcategory' =&gt; $subcategory,\n            'product' =&gt; $product-&gt;load(['variants', 'reviews']),\n            'relatedProducts' =&gt; $product-&gt;getRelatedProducts(),\n        ]);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">\u5546\u54c1\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u3068\u5728\u5eab\u7ba1\u7406<\/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=\"\">\/\/ routes\/web.php\nRoute::get('products\/{product}\/variants\/{variant}', [\n    ProductVariantController::class, \n    'show'\n])-&gt;name('product.variant.show');\n\nRoute::post('cart\/add\/{product}\/{variant?}', [\n    CartController::class, \n    'add'\n])-&gt;name('cart.add');\n\n\/\/ app\/Http\/Controllers\/CartController.php\nclass CartController extends Controller\n{\n    public function add(Product $product, ?Variant $variant = null)\n    {\n        $item = $variant ?? $product;\n\n        if (!$item-&gt;hasStock()) {\n            return back()-&gt;with('error', '\u5728\u5eab\u5207\u308c\u3067\u3059');\n        }\n\n        Cart::add($item);\n        return back()-&gt;with('success', '\u30ab\u30fc\u30c8\u306b\u8ffd\u52a0\u3057\u307e\u3057\u305f');\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u4f7f\u7528\u3067\u304d\u308b\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3067\u3001\u69d8\u3005\u306a\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u306b\u5bfe\u5fdc\u3067\u304d\u307e\u3059\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":[33,12],"tags":[],"class_list":{"0":"post-3187","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php-laravel","7":"category-php","8":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3187","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=3187"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3187\/revisions"}],"predecessor-version":[{"id":3189,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3187\/revisions\/3189"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}