{"id":889,"date":"2025-06-12T02:05:08","date_gmt":"2025-06-11T18:05:08","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/889.html"},"modified":"2025-06-12T02:05:08","modified_gmt":"2025-06-11T18:05:08","slug":"%e5%9c%a8-laravel-%e4%b8%ad%e4%bf%9d%e6%8a%a4%e8%b7%af%e7%94%b1%ef%bc%9a%e5%ae%9e%e7%94%a8%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/889.html","title":{"rendered":"\u5728 Laravel \u4e2d\u4fdd\u62a4\u8def\u7531\uff1a\u5b9e\u7528\u6307\u5357"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Laravel &#20013;&#20445;&#25252;&#36335;&#30001;&#26159;&#38750;&#24120;&#37325;&#35201;&#30340;&#23433;&#20840;&#25514;&#26045;&#65292;&#21487;&#20197;&#38450;&#27490;&#26410;&#32463;&#25480;&#26435;&#30340;&#35775;&#38382;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#23454;&#29992;&#30340;&#25351;&#21335;&#26469;&#24110;&#21161;&#20320;&#22312; Laravel &#20013;&#20445;&#25252;&#36335;&#30001;&#12290;<\/p>\n<h3>1. &#20351;&#29992;&#20013;&#38388;&#20214;<\/h3>\n<p>Laravel &#25552;&#20379;&#20102;&#22810;&#31181;&#20013;&#38388;&#20214;&#26469;&#20445;&#25252;&#36335;&#30001;&#12290;&#26368;&#24120;&#29992;&#30340;&#20013;&#38388;&#20214;&#26159; <code>auth<\/code>&#12289;<code>guest<\/code> &#21644; <code>throttle<\/code>&#12290;<\/p>\n<h4>&#31034;&#20363;&#65306;&#20351;&#29992; <code>auth<\/code><\/h4>\n<pre><code class=\"language-php\">\/\/ &#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992; auth &#20013;&#38388;&#20214;\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse Auth;\n\nclass ExampleController extends Controller\n{\n    public function index()\n    {\n        if (Auth::check()) {\n            return view('welcome');\n        } else {\n            return redirect('\/login');\n        }\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#21482;&#26377;&#36890;&#36807;&#35748;&#35777;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382; <code>index<\/code> &#26041;&#27861;&#12290;<\/p>\n<h4>&#31034;&#20363;&#65306;&#20351;&#29992; <code>guest<\/code><\/h4>\n<pre><code class=\"language-php\">\/\/ &#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992; guest &#20013;&#38388;&#20214;\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse Auth;\n\nclass ExampleController extends Controller\n{\n    public function index()\n    {\n        if (Auth::guest()) {\n            return view('welcome');\n        } else {\n            return redirect('\/dashboard');\n        }\n    }\n}<\/code><\/pre>\n<p>&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#21482;&#26377;&#26410;&#35748;&#35777;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382; <code>index<\/code> &#26041;&#27861;&#12290;<\/p>\n<h4>&#31034;&#20363;&#65306;&#20351;&#29992; <code>throttle<\/code><\/h4>\n<pre><code class=\"language-php\">\/\/ &#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992; throttle &#20013;&#38388;&#20214;\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse Auth;\n\nclass ExampleController extends Controller\n{\n    public function index(Request $request)\n    {\n        if ($request-&gt;wantsJson()) {\n            \/\/ &#22788;&#29702; JSON &#35831;&#27714;\n        } else {\n            if (!Auth::check() &amp;&amp; !Gate::allows('view-dashboard')) {\n                abort(403);\n            }\n\n            return view('welcome');\n        }\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#21482;&#26377;&#36890;&#36807;&#35748;&#35777;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382; <code>index<\/code> &#26041;&#27861;&#65292;&#24182;&#19988;&#22914;&#26524;&#29992;&#25143;&#27809;&#26377;&#26435;&#38480;&#26597;&#30475;&#20202;&#34920;&#30424;&#65292;&#21017;&#36820;&#22238; 403 &#29366;&#24577;&#30721;&#12290;<\/p>\n<h3>2. &#20351;&#29992;&#31574;&#30053;<\/h3>\n<p>&#31574;&#30053;&#65288;Policy&#65289;&#26159;&#19968;&#31181;&#26356;&#28789;&#27963;&#30340;&#26041;&#24335;&#26469;&#25511;&#21046;&#23545;&#36164;&#28304;&#30340;&#35775;&#38382;&#12290;&#20320;&#21487;&#20197;&#20026;&#27599;&#20010;&#27169;&#22411;&#21019;&#24314;&#31574;&#30053;&#31867;&#65292;&#24182;&#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;&#36825;&#20123;&#31574;&#30053;&#12290;<\/p>\n<h4>&#31034;&#20363;&#65306;&#21019;&#24314;&#31574;&#30053;<\/h4>\n<pre><code class=\"language-bash\">php artisan make:policy PostPolicy --model=Post<\/code><\/pre>\n<p>&#28982;&#21518;&#22312; <code>app\/Policies\/PostPolicy.php<\/code> &#25991;&#20214;&#20013;&#23450;&#20041;&#31574;&#30053;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppPolicies;\n\nuse AppModelsPost;\nuse IlluminateAuthCanSeeAnyModelContract;\n\nclass PostPolicy implements CanSeeAnyModelContract\n{\n    \/**\n     * Determine whether the user can see all models.\n     *\n     * @param AppModelsUser $user\n     * @return bool\n     *\/\n    public function seeAll(User $user)\n    {\n        return $user-&gt;isAdmin();\n    }\n}<\/code><\/pre>\n<h4>&#31034;&#20363;&#65306;&#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;&#31574;&#30053;<\/h4>\n<pre><code class=\"language-php\">\/\/ &#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;&#31574;&#30053;\nnamespace AppHttpControllers;\n\nuse AppModelsPost;\nuse AppPoliciesPostPolicy;\nuse IlluminateHttpRequest;\n\nclass PostController extends Controller\n{\n    public function show(Post $post)\n    {\n        if (!Auth::check() || !PostPolicy::seeAll(Auth::user())) {\n            abort(403);\n        }\n\n        return view('post.show', ['post' =&gt; $post]);\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#21482;&#26377;&#31649;&#29702;&#21592;&#25165;&#33021;&#30475;&#21040;&#25152;&#26377;&#24086;&#23376;&#12290;<\/p>\n<h3>3. &#20351;&#29992;&#36335;&#30001;&#32452;<\/h3>\n<p>&#20320;&#20063;&#21487;&#20197;&#23558;&#22810;&#20010;&#36335;&#30001;&#25918;&#22312;&#21516;&#19968;&#20010;&#36335;&#30001;&#32452;&#20013;&#65292;&#24182;&#22312;&#36335;&#30001;&#32452;&#20013;&#35774;&#32622;&#20013;&#38388;&#20214;&#12290;<\/p>\n<h4>&#31034;&#20363;&#65306;&#20351;&#29992;&#36335;&#30001;&#32452;<\/h4>\n<pre><code class=\"language-php\">\/\/ &#22312; routes\/web.php &#25991;&#20214;&#20013;\nRoute::group(['middleware' =&gt; 'auth'], function () {\n    Route::get('\/', 'HomeController@index')-&gt;name('home');\n    Route::get('\/dashboard', 'DashboardController@index')-&gt;name('dashboard');\n});<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#21482;&#26377;&#36890;&#36807;&#35748;&#35777;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382; <code>\/home<\/code> &#21644; <code>\/dashboard<\/code> &#36335;&#30001;&#12290;<\/p>\n<p>&#36890;&#36807;&#20197;&#19978;&#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#22312; Laravel &#20013;&#26377;&#25928;&#22320;&#20445;&#25252;&#36335;&#30001;&#65292;&#30830;&#20445;&#21482;&#26377;&#25480;&#26435;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382;&#25935;&#24863;&#30340;&#39029;&#38754;&#21644;&#21151;&#33021;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22312;&#24320;&#21457;Web&#24212;&#29992;&#26102;&#65292;&#23433;&#20840;&#24615;&#33267;&#20851;&#37325;&#35201;&#12290;Laravel&#26159;&#19968;&#27454;&#27969;&#34892;&#30340;PHP&#26694;&#26550;&#65292;&#25552;&#20379;&#20102;&#22810;&#31181;&#26041;&#27861;&#26469;&#20445;&#25252;&#36335;&#30001;&#65292;&#20197;&#30830;&#20445;&#21482;&#26377;&#25480;&#26435;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382;&#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#26576;&#20123;&#21306;&#22495;&#12290;&#22312;&#36825;&#31687;&#25351;&#21335;&#20013;&#65292;&#25105;&#20204;&#23558;&#35814;&#32454;&#20171;&#32461;&#22312;Laravel&#20013;&#20445;&#25252;&#36335;&#30001;&#30340;&#21508;&#31181;&#26041;&#27861;&#65292;&#20174;&#22522;&#26412;&#30340;&#35748;&#35777;&#21040;&#22522;&#20110;&#35282;&#33394;&#30340;&#35775;&#38382;&#25511;&#21046;&#12290;<\/p><h2>&#20197;&#35748;&#35777;&#24320;&#22987;&#12290;<\/h2><p>&#39318;&#20808;&#65292;&#25105;&#20204;&#38656;&#35201;&#22312;&#35775;&#38382;&#26576;&#20123;&#36335;&#30001;&#26102;&#30830;&#20445;&#29992;&#25143;&#24050;&#35748;&#35777;&#12290;Laravel &#30340;&#20869;&#32622;&#36523;&#20221;&#39564;&#35777;&#31995;&#32479;&#20351;&#24471;&#36825;&#38750;&#24120;&#31616;&#21333;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#21629;&#20196;&#29983;&#25104;&#25152;&#38656;&#30340;&#25511;&#21046;&#22120;&#21644;&#35270;&#22270;&#65306;<\/p><pre><code>php artisan make:auth<\/code><\/pre><p>&#19968;&#26086;&#22312;&#35748;&#35777;&#26041;&#38754;&#21462;&#24471;&#36827;&#23637;&#65292;&#23601;&#21487;&#20197;&#36890;&#36807;&#36335;&#30001;&#38480;&#21046;&#35775;&#38382;&#26435;&#38480;&#12290;<code>auth<\/code>&#20013;&#38388;&#20214;&#65306;<\/p><pre><code>Route::get('\/dashboard', function() {\n    \/\/ Protected route\n})-&gt;middleware('auth');<\/code><\/pre><p>&#36825;&#30830;&#20445;&#21482;&#26377;&#24050;&#30331;&#24405;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382;&#12290;<code>\/dashboard<\/code>URL.<\/p><h2>&#36335;&#30001;&#20445;&#25252;&#30340;&#20013;&#38388;&#20214;<\/h2><p>Laravel&#30340;&#20013;&#38388;&#20214;&#21151;&#33021;&#24378;&#22823;&#19988;&#28789;&#27963;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#33258;&#23450;&#20041;&#20013;&#38388;&#20214;&#26469;&#22788;&#29702;&#26356;&#22797;&#26434;&#30340;&#35748;&#35777;&#22330;&#26223;&#65306;<\/p><pre><code>php artisan make:middleware EnsureAdminOnly<\/code><\/pre><p>&#22312;&#20013;&#38388;&#20214;&#20869;&#65292;&#20320;&#21487;&#20197;&#23450;&#20041;&#20320;&#30340;&#35748;&#35777;&#36923;&#36753;&#65306;<\/p><pre><code>public function handle($request, Closure $next)\n{\n    if (!auth()-&gt;user()-&gt;isAdmin) {\n        return redirect('home');\n    }\n    return $next($request);\n}<\/code><\/pre><p>&#28982;&#21518;&#65292;&#27880;&#20876;&#20013;&#38388;&#20214;&#21040;<code>app\/Http\/Kernel.php<\/code>&#25991;&#20214;&#65292;&#35831;&#22312;&#24744;&#30340;&#36335;&#30001;&#20013;&#20351;&#29992;&#65306;<\/p><pre><code>protected $routeMiddleware[\n    'admin' =&gt; AppHttpMiddlewareEnsureAdminOnly::class;\n];<\/code><\/pre><pre><code>Route::get('\/admin\/dashboard', 'AdminController@index')-&gt;middleware('admin');<\/code><\/pre><p>&#36825;&#20250;&#38480;&#21046;&#23545;&#30340;&#35775;&#38382;&#26435;&#38480;&#12290;<code>\/admin\/dashboard<\/code>&#31649;&#29702;&#21592;&#29992;&#25143;&#19987;&#29992;&#30340;&#36335;&#32447;&#12290;<\/p><h2>&#22522;&#20110;&#35282;&#33394;&#30340;&#35775;&#38382;&#25511;&#21046;&#65288;RBAC&#65289;<\/h2><p>&#20026;&#20102;&#22788;&#29702;&#26356;&#22797;&#26434;&#30340;&#35775;&#38382;&#25511;&#21046;&#22330;&#26223;&#65292;&#20320;&#21487;&#20197;&#32771;&#34385;&#23454;&#29616;&#22522;&#20110;&#35282;&#33394;&#30340;&#35775;&#38382;&#25511;&#21046;&#65306;<\/p><pre><code>composer require spatie\/laravel-permission<\/code><\/pre><p>&#36825;&#20010;&#21253;&#20801;&#35768;&#24744;&#26681;&#25454;&#38656;&#35201;&#21160;&#24577;&#20851;&#32852;&#29992;&#25143;&#19982;&#35282;&#33394;&#21644;&#26435;&#38480;&#12290;&#28982;&#21518;&#24744;&#21487;&#20197;&#20351;&#29992;&#20013;&#38388;&#20214;&#26469;&#26816;&#26597;&#36825;&#20123;&#26435;&#38480;&#65306;<\/p><pre><code>Route::get('\/manage-users', 'UserController@manage')-&gt;middleware('permission:manage-users');<\/code><\/pre><p>&#36825;&#30830;&#20445;&#21482;&#26377;&#25317;&#26377;&#35813;&#26435;&#38480;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382;&#12290;<code>manage-users<\/code>&#33719;&#24471;&#35775;&#38382;&#26435;&#38480;&#21487;&#20197;&#35775;&#38382;&#35813;&#36335;&#32447;&#12290;<\/p><h2>&#20445;&#25252;API&#36335;&#30001;<\/h2><p>&#22914;&#26524;&#20320;&#22312;&#22788;&#29702;API&#36335;&#30001;&#65292;&#21487;&#33021;&#38656;&#35201;&#20351;&#29992;&#20196;&#29260;&#35748;&#35777;&#12290;Laravel&#33258;&#24102;Passport&#65292;&#36825;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;OAuth2&#26381;&#21153;&#22120;&#23454;&#29616;&#65306;<\/p><pre><code>composer require laravel\/passport\nphp artisan passport:install<\/code><\/pre><p>&#20320;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992;API&#36335;&#30001;&#26469;&#20445;&#25252;&#23427;&#12290;<code>auth:api<\/code>&#20013;&#38388;&#20214;&#65306;<\/p><pre><code>Route::get('\/user\/profile', function() {\n    \/\/ Protected API route\n})-&gt;middleware('auth:api');<\/code><\/pre><h2>&#32467;&#35770;&#12290;<\/h2><p>&#30830;&#20445;Laravel&#24212;&#29992;&#31243;&#24207;&#30340;&#36335;&#30001;&#23433;&#20840;&#33267;&#20851;&#37325;&#35201;&#65292;&#20197;&#32500;&#25252;&#19968;&#20010;&#23433;&#20840;&#19988;&#20581;&#22766;&#30340;Web&#24212;&#29992;&#12290;&#36890;&#36807;&#21033;&#29992;Laravel&#30340;&#36523;&#20221;&#39564;&#35777;&#12289;&#20013;&#38388;&#20214;&#12289;&#22522;&#20110;&#35282;&#33394;&#30340;&#35775;&#38382;&#25511;&#21046;&#20197;&#21450;&#29992;&#20110;API&#30340;Passport&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#19968;&#22871;&#24037;&#20855;&#26469;&#22788;&#29702;&#20219;&#20309;&#25480;&#26435;&#38656;&#27714;&#12290;&#35831;&#23450;&#26399;&#23457;&#26597;&#21644;&#27979;&#35797;&#24744;&#30340;&#23433;&#20840;&#24615;&#25514;&#26045;&#65292;&#20197;&#20415;&#21450;&#26102;&#21457;&#29616;&#28508;&#22312;&#30340;&#23433;&#20840;&#28431;&#27934;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Laravel &#20013;&#21019;&#24314;&#24182;&#20445;&#25252;&#36335;&#30001;&#26159;&#23454;&#29616; RESTful API &#26550;&#26500;&#30340;&#20851;&#38190;&#37096;&#20998;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#23454;&#29992;&#30340;&#25351;&#21335;&#21644;&#31034;&#20363;&#20195;&#30721;&#65306;<\/p>\n<h3>1. &#21019;&#24314;&#36335;&#30001;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#22312; <code>routes\/web.php<\/code> &#25991;&#20214;&#20013;&#23450;&#20041;&#36335;&#30001;&#35268;&#21017;&#12290;&#20351;&#29992; <code>Route::middleware('auth:api')<\/code> &#26469;&#39564;&#35777;&#29992;&#25143;&#36523;&#20221;&#12290;<\/p>\n<pre><code class=\"language-php\">Route::post('\/login', 'AuthController@login')-&gt;name('login');\nRoute::post('\/logout', 'AuthController@logout')-&gt;name('logout');\n\nRoute::resource('users', 'UserController', [\n    'only' =&gt; ['index', 'show'],\n]);<\/code><\/pre>\n<h3>2. &#39564;&#35777;&#35831;&#27714;<\/h3>\n<p>&#30830;&#20445;&#21482;&#26377;&#32463;&#36807;&#36523;&#20221;&#39564;&#35777;&#30340;&#29992;&#25143;&#25165;&#33021;&#35775;&#38382;&#26576;&#20123;&#36164;&#28304;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;&#28155;&#21152;&#39069;&#22806;&#30340;&#39564;&#35777;&#23383;&#27573;&#21040;&#35831;&#27714;&#23545;&#35937;&#26469;&#23454;&#29616;&#36825;&#19968;&#30446;&#26631;&#12290;<\/p>\n<pre><code class=\"language-php\">public function store(Request $request)\n{\n    $this-&gt;validate($request, [\n        'email' =&gt; 'required|email|unique:users',\n        'password' =&gt; 'required|string|min:8',\n    ]);\n\n    \/\/ &#20551;&#35774;&#36825;&#37324;&#26377;&#19968;&#20010;&#25968;&#25454;&#24211;&#25805;&#20316;\n    User::create([\n        'email' =&gt; $request['email'],\n        'password' =&gt; bcrypt($request['password']),\n    ]);\n\n    return response()-&gt;json(['message' =&gt; 'User created successfully']);\n}<\/code><\/pre>\n<h3>3. &#20351;&#29992;&#20013;&#38388;&#20214;&#36827;&#34892;&#23433;&#20840;&#25511;&#21046;<\/h3>\n<p>Laravel &#25552;&#20379;&#20102;&#21508;&#31181;&#20013;&#38388;&#20214;&#65292;&#22914; CSRF &#21644; Token &#39564;&#35777;&#31561;&#65292;&#36825;&#20123;&#37117;&#21487;&#20197;&#29992;&#26469;&#20445;&#25252;&#20320;&#30340; API&#12290;<\/p>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesGate;\nuse IlluminateHttpRequest;\n\nRoute::get('\/protected-route', function (Request $request) {\n    if (!Gate::allows('view-users')) {\n        abort(403);\n    }\n\n    return view('protected-page');\n});<\/code><\/pre>\n<h3>4. &#35774;&#32622;&#36335;&#30001;&#26435;&#38480;<\/h3>\n<p>&#20351;&#29992; <code>Route::middleware('permission')<\/code> &#26469;&#25351;&#23450;&#21738;&#20123;&#36335;&#30001;&#21482;&#23545;&#20855;&#26377;&#29305;&#23450;&#26435;&#38480;&#30340;&#35282;&#33394;&#24320;&#25918;&#12290;<\/p>\n<pre><code class=\"language-php\">Route::group(['middleware' =&gt; 'permission'], function () {\n    Route::resource('users', 'UserController', [\n        'only' =&gt; ['index', 'show'],\n    ]);\n});<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<pre><code class=\"language-php\">\/\/ UserController.php\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse AppModelsUser;\n\nclass UserController extends Controller\n{\n    public function index()\n    {\n        \/\/ &#29992;&#25143;&#21015;&#34920;&#36923;&#36753;\n    }\n\n    public function show(User $user)\n    {\n        \/\/ &#29992;&#25143;&#35814;&#24773;&#36923;&#36753;\n    }\n}\n\n\/\/ AuthController.php\nnamespace AppHttpControllersAuth;\n\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesAuth;\nuse IlluminateSupportFacadesHash;\nuse IlluminateValidationValidationException;\nuse AppModelsUser;\n\nclass AuthController extends Controller\n{\n    public function login(Request $request)\n    {\n        try {\n            $credentials = $request-&gt;validate([\n                'email' =&gt; 'required|email',\n                'password' =&gt; 'required',\n            ]);\n\n            if (!$token = Hash::check($request-&gt;password, $user = User::where('email', $credentials['email'])-&gt;first())) {\n                throw new ValidationException(['password' =&gt; 'The provided password is incorrect.']);\n            }\n\n            return response()-&gt;json(compact('token'));\n        } catch (Throwable $th) {\n            \/\/ &#22788;&#29702;&#30331;&#24405;&#22833;&#36133;&#30340;&#24773;&#20917;\n        }\n    }\n\n    public function logout()\n    {\n        Auth::guard('api')-&gt;logout();\n\n        return response()-&gt;noContent();\n    }\n}<\/code><\/pre>\n<p>&#20197;&#19978;&#23601;&#26159;&#22914;&#20309;&#22312; Laravel &#20013;&#21019;&#24314;&#24182;&#20445;&#25252;&#36335;&#30001;&#30340;&#22522;&#26412;&#25351;&#21335;&#12290;&#26681;&#25454;&#20855;&#20307;&#38656;&#27714;&#35843;&#25972;&#19978;&#36848;&#20195;&#30721;&#20013;&#30340;&#21151;&#33021;&#21644;&#36923;&#36753;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Laravel &#20013;&#20445;&#25252;&#36335;&#30001;&#26159;&#38750;&#24120;&#37325;&#35201;&#30340;&#23433;&#20840;&#25514;&#038;#2..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-889","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=889"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=889"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=889"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}