{"id":906,"date":"2025-06-12T02:28:05","date_gmt":"2025-06-11T18:28:05","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/906.html"},"modified":"2025-06-12T02:28:05","modified_gmt":"2025-06-11T18:28:05","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8-laravel-%e4%b8%ad%e6%b7%bb%e5%8a%a0%e8%87%aa%e5%ae%9a%e4%b9%89%e9%aa%8c%e8%af%81%e8%a7%84%e5%88%99%ef%bc%88%e5%8c%85%e5%90%ab%e7%a4%ba%e4%be%8b%ef%bc%89","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/906.html","title":{"rendered":"\u5982\u4f55\u5728 Laravel \u4e2d\u6dfb\u52a0\u81ea\u5b9a\u4e49\u9a8c\u8bc1\u89c4\u5219\uff08\u5305\u542b\u793a\u4f8b\uff09"},"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;&#28155;&#21152;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#21487;&#20197;&#24110;&#21161;&#20320;&#22312;&#34920;&#21333;&#25552;&#20132;&#26102;&#36827;&#34892;&#26356;&#22797;&#26434;&#30340;&#39564;&#35777;&#36923;&#36753;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#22312; Laravel &#20013;&#28155;&#21152;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#30340;&#35814;&#32454;&#27493;&#39588;&#21644;&#31034;&#20363;&#20195;&#30721;&#12290;<\/p>\n<h3>1. &#21019;&#24314;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#39564;&#35777;&#35268;&#21017;&#31867;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#21629;&#20196;&#26469;&#21019;&#24314;&#65306;<\/p>\n<pre><code class=\"language-bash\">php artisan make:rule MyCustomRule<\/code><\/pre>\n<p>&#36825;&#20010;&#21629;&#20196;&#20250;&#29983;&#25104;&#19968;&#20010; <code>MyCustomRule<\/code> &#31867;&#25991;&#20214;&#65292;&#24182;&#19988;&#20250;&#22312; <code>app\/Rules<\/code> &#30446;&#24405;&#19979;&#25214;&#21040;&#23427;&#12290;<\/p>\n<h3>2. &#32534;&#20889;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#26041;&#27861;<\/h3>\n<p>&#22312; <code>MyCustomRule.php<\/code> &#25991;&#20214;&#20013;&#65292;&#32534;&#20889;&#20320;&#30340;&#39564;&#35777;&#35268;&#21017;&#26041;&#27861;&#12290;&#20363;&#22914;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppRules;\n\nuse IlluminateContractsValidationRule;\n\nclass MyCustomRule implements Rule\n{\n    public function passes($attribute, $value)\n    {\n        \/\/ &#36825;&#37324;&#26159;&#20320;&#30340;&#39564;&#35777;&#36923;&#36753;\n        return $value &gt; 0; \/\/ &#31034;&#20363;&#65306;&#20540;&#24517;&#39035;&#22823;&#20110;0\n    }\n\n    public function message()\n    {\n        return 'The :attribute must be greater than 0.';\n    }\n}<\/code><\/pre>\n<h3>3. &#20351;&#29992;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h3>\n<p>&#22312;&#20320;&#30340;&#25511;&#21046;&#22120;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#36825;&#20010;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#26469;&#39564;&#35777;&#34920;&#21333;&#25968;&#25454;&#12290;&#20363;&#22914;&#65306;<\/p>\n<pre><code class=\"language-php\">use AppHttpControllersController;\nuse AppRulesMyCustomRule;\nuse IlluminateHttpRequest;\n\nclass ExampleController extends Controller\n{\n    public function store(Request $request)\n    {\n        $validatedData = $request-&gt;validate([\n            'my_field' =&gt; ['required', new MyCustomRule()],\n        ]);\n\n        \/\/ &#22788;&#29702; validatedData\n        dd($validatedData);\n    }\n}<\/code><\/pre>\n<h3>4. &#27979;&#35797;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h3>\n<p>&#30830;&#20445;&#20320;&#30340;&#34920;&#21333;&#23383;&#27573;&#19982; <code>my_custom_rule<\/code> &#39564;&#35777;&#35268;&#21017;&#21305;&#37197;&#12290;&#20363;&#22914;&#65292;&#22312; HTML &#34920;&#21333;&#20013;&#65306;<\/p>\n<pre><code class=\"language-html\">&lt;form action=\"\/example\" method=\"POST\"&gt;\n    @csrf\n    &lt;input type=\"text\" name=\"my_field\" required&gt;\n    &lt;button type=\"submit\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>&#24403;&#29992;&#25143;&#23581;&#35797;&#25552;&#20132;&#34920;&#21333;&#26102;&#65292;Laravel &#20250;&#33258;&#21160;&#24212;&#29992; <code>MyCustomRule<\/code> &#30340;&#39564;&#35777;&#35268;&#21017;&#65292;&#24182;&#36820;&#22238;&#30456;&#24212;&#30340;&#38169;&#35823;&#20449;&#24687;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#21019;&#24314;&#12289;&#20351;&#29992;&#21644;&#27979;&#35797;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#65306;<\/p>\n<h4>1. &#21019;&#24314;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#31867;<\/h4>\n<pre><code class=\"language-bash\">php artisan make:rule MyCustomRule<\/code><\/pre>\n<h4>2. &#32534;&#20889;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#26041;&#27861;<\/h4>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppRules;\n\nuse IlluminateContractsValidationRule;\n\nclass MyCustomRule implements Rule\n{\n    public function passes($attribute, $value)\n    {\n        return $value &gt; 0; \/\/ &#31034;&#20363;&#65306;&#20540;&#24517;&#39035;&#22823;&#20110;0\n    }\n\n    public function message()\n    {\n        return 'The :attribute must be greater than 0.';\n    }\n}<\/code><\/pre>\n<h4>3. &#20351;&#29992;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h4>\n<pre><code class=\"language-php\">use AppHttpControllersController;\nuse AppRulesMyCustomRule;\nuse IlluminateHttpRequest;\n\nclass ExampleController extends Controller\n{\n    public function store(Request $request)\n    {\n        $validatedData = $request-&gt;validate([\n            'my_field' =&gt; ['required', new MyCustomRule()],\n        ]);\n\n        \/\/ &#22788;&#29702; validatedData\n        dd($validatedData);\n    }\n}<\/code><\/pre>\n<h4>4. &#27979;&#35797;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h4>\n<p>&#22312; HTML &#34920;&#21333;&#20013;&#65306;<\/p>\n<pre><code class=\"language-html\">&lt;form action=\"\/example\" method=\"POST\"&gt;\n    @csrf\n    &lt;input type=\"text\" name=\"my_field\" required&gt;\n    &lt;button type=\"submit\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>&#36825;&#26679;&#65292;&#24403;&#29992;&#25143;&#23581;&#35797;&#25552;&#20132;&#34920;&#21333;&#26102;&#65292;Laravel &#20250;&#33258;&#21160;&#24212;&#29992; <code>MyCustomRule<\/code> &#30340;&#39564;&#35777;&#35268;&#21017;&#65292;&#24182;&#36820;&#22238;&#30456;&#24212;&#30340;&#38169;&#35823;&#20449;&#24687;&#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>Laravel&#65292;&#19968;&#20010;&#27969;&#34892;&#30340;PHP&#26694;&#26550;&#65292;&#25552;&#20379;&#20102;&#35768;&#22810;&#21151;&#33021;&#26469;&#20351;&#24320;&#21457;&#26356;&#21152;&#20415;&#25463;&#21644;&#24378;&#22823;&#65292;&#20854;&#20013;&#19968;&#20010;&#24378;&#22823;&#30340;&#29305;&#24615;&#23601;&#26159;&#20854;&#39564;&#35777;&#32452;&#20214;&#12290;&#40664;&#35748;&#24773;&#20917;&#19979;&#65292;Laravel&#25903;&#25345;&#22810;&#31181;&#39564;&#35777;&#35268;&#21017;&#65292;&#20197;&#28385;&#36275;&#24120;&#35265;&#30340;&#29992;&#20363;&#38656;&#27714;&#65307;&#28982;&#32780;&#65292;&#22312;&#26576;&#20123;&#24773;&#20917;&#19979;&#65292;&#21487;&#33021;&#38656;&#35201;&#19968;&#20123;&#29305;&#23450;&#30340;&#21151;&#33021;&#65292;&#36825;&#20123;&#22312;&#40664;&#35748;&#35774;&#32622;&#19979;&#24182;&#26410;&#25552;&#20379;&#12290;&#36825;&#26102;&#65292;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#23601;&#27966;&#19978;&#29992;&#22330;&#20102;&#12290;<\/p><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#36880;&#27493;&#20171;&#32461;&#22914;&#20309;&#22312;Laravel&#20013;&#21019;&#24314;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#12290;&#20174;&#22522;&#30784;&#24320;&#22987;&#65292;&#36880;&#28176;&#36807;&#28193;&#21040;&#26356;&#22797;&#26434;&#30340;&#31034;&#20363;&#65292;&#20197;&#30830;&#20445;&#24744;&#21487;&#20197;&#26681;&#25454;&#33258;&#24049;&#30340;&#39033;&#30446;&#36866;&#24212;&#36825;&#20123;&#26041;&#27861;&#12290;<\/p><p>&#20808;&#20915;&#26465;&#20214;<\/p><p>&#19968;&#20010;&#21151;&#33021;&#23436;&#22791;&#30340;Laravel&#39033;&#30446;&#29992;&#20110;&#27979;&#35797;&#39564;&#35777;&#35268;&#21017;&#12290;<\/p><p>&#22312;&#24744;&#30340;&#24320;&#21457;&#26426;&#22120;&#19978;&#23433;&#35013;&#20102;Laravel&#12290;<\/p><p>&#20855;&#22791;&#23545;PHP&#21644;Laravel&#30340;&#22522;&#26412;&#29702;&#35299;&#26159;&#38750;&#24120;&#37325;&#35201;&#30340;&#12290;<\/p><h2>&#22522;&#26412;&#33258;&#23450;&#20041;&#39564;&#35777;<\/h2><p>&#35201;&#22312;Laravel&#20013;&#28155;&#21152;&#19968;&#20010;&#31616;&#21333;&#30340;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#65292;&#21482;&#38656;&#23558;&#38381;&#21253;&#20256;&#36882;&#32473;&#23427;&#21363;&#21487;&#12290;<code>Validator::extend<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code>$validator = Validator::make($data, [...]);\n\nValidator::extend('custom_rule', function ($attribute, $value, $parameters, $validator) {\n  return $value == 'some_value'; \/\/ Custom condition\n});\n\nif ($validator-&gt;fails()) {\n  return redirect('some_route')-&gt;withErrors($validator);\n}<\/code><\/pre><p>&#22312;&#36825;&#19968;&#20363;&#23376;&#37324;&#65292;<code>custom_rule<\/code>&#26816;&#26597;&#32473;&#23450;&#30340;&#23646;&#24615;&#26159;&#21542;&#31561;&#20110;&ldquo;&#19968;&#20123;&#20540;&rdquo;&#12290;&#24403;&#28982;&#65292;&#36825;&#38750;&#24120;&#22522;&#30784;&#19988;&#24182;&#19981;&#23454;&#29992;&#65307;&#25105;&#20204;&#24456;&#24555;&#20250;&#30475;&#21040;&#26356;&#23454;&#38469;&#30340;&#20363;&#23376;&#12290;<\/p><h2>&#20351;&#29992;&#35268;&#21017;&#23545;&#35937;<\/h2><p>&#26356;&#39640;&#32423;&#30340;&#26041;&#24335;&#26159;&#36890;&#36807;&#20351;&#29992;&#35268;&#21017;&#23545;&#35937;&#26469;&#24212;&#29992;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#12290;Laravel &#20351;&#24471;&#21019;&#24314;&#26032;&#35268;&#21017;&#23545;&#35937;&#21464;&#24471;&#23481;&#26131;&#65306;<\/p><pre><code>php artisan make:rule ValidCustomText<\/code><\/pre><p>&#36816;&#34892;&#21629;&#20196;&#21518;&#65292;&#20250;&#22312;&#35268;&#21017;&#23545;&#35937;&#21015;&#34920;&#20013;&#29983;&#25104;&#19968;&#20010;&#26032;&#30340;&#35268;&#21017;&#23545;&#35937;&#12290;<code>app\/Rules<\/code>&#30446;&#24405;&#12290;&#20551;&#35774;&#25105;&#20204;&#35201;&#39564;&#35777;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#20351;&#20854;&#19981;&#20165;&#21253;&#21547;&#23383;&#27597;&#21644;&#25968;&#23383;&#65292;&#36824;&#20855;&#26377;&#20132;&#26367;&#30340;&#23383;&#27597;&#21644;&#25968;&#23383;&#12290;<\/p><pre><code>namespace AppRules;\n\nuse IlluminateContractsValidationRule;\n\nclass ValidCustomText implements Rule\n{\n  public function passes($attribute, $value)\n  {\n    return preg_match('\/^(?:[a-z]+d+|[d]+[a-z]+)+$\/i', $value) &gt; 0;\n  }\n\n  public function message()\n  {\n    return 'The :attribute must have alternating letters and numbers.';\n  }\n}<\/code><\/pre><p>&#20320;&#21487;&#20197;&#21033;&#29992;&#26032;&#23450;&#20041;&#30340;&#35268;&#21017;&#23545;&#35937;&#26469;&#23450;&#20041;&#39564;&#35777;&#36923;&#36753;&#12290;<\/p><pre><code>use AppRulesValidCustomText;\n\n$request-&gt;validate([\n  'custom_text' =&gt; [new ValidCustomText()],\n]);<\/code><\/pre><p>&#36825;&#27573;&#20195;&#30721;&#29255;&#27573;&#20026;&#21517;&#20026;request&#36755;&#20837;&#30340;&#35831;&#27714;&#35774;&#32622;&#20102;&#39564;&#35777;&#12290;<code>custom_text<\/code>&#20351;&#29992;&#25105;&#20204;&#30340;&#23450;&#21046;&#26381;&#21153;<code>ValidCustomText<\/code>&#35268;&#21017;&#12290;<\/p><h2>&#22797;&#26434;&#26465;&#20214;&#39564;&#35777;<\/h2><p>&#26377;&#26102;&#65292;&#20320;&#38656;&#35201;&#30340;&#39564;&#35777;&#35268;&#21017;&#21487;&#33021;&#38656;&#35201;&#22788;&#29702;&#26356;&#22797;&#26434;&#30340;&#26465;&#20214;&#12290;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#33258;&#23450;&#20041;&#35268;&#21017;&#26469;&#26681;&#25454;&#35831;&#27714;&#20013;&#30340;&#21478;&#19968;&#20010;&#36755;&#20837;&#20540;&#36827;&#34892;&#39564;&#35777;&#12290;<\/p><pre><code>Validator::extend('if_value_then_required', function ($attribute, $value, $parameters, $validator) {\n  $other = Arr::get($validator-&gt;getData(), $parameters[0], null);\n  return $other != $parameters[1] || !empty($value);\n});<\/code><\/pre><p>&#22312;&#36825;&#19968;&#35268;&#21017;&#20013;&#65292;&#21517;&#20026;<code>if_value_then_required<\/code>&#22914;&#26524;&#21478;&#19968;&#20010;&#23383;&#27573;&#65288;&#22312;&#25351;&#23450;&#30340;&#65289;<code>$parameters[0]<\/code>&#23427;&#31561;&#20110;&#26576;&#20010;&#20540;&#12290;<code>$parameters[1]<\/code>&#22914;&#26524;&#22312;&#39564;&#35777;&#23383;&#27573;&#19979;&#26377;&#25968;&#25454;&#65292;&#37027;&#20040;&#35813;&#23383;&#27573;&#23601;&#19981;&#33021;&#20026;&#31354;&#12290;<\/p><pre><code>$validator = Validator::make($request-&gt;all(), [\n  'some_field' =&gt; 'required',\n  'conditional_field' =&gt; 'if_value_then_required:some_field,some_value',\n]);\n\nif ($validator-&gt;fails()) {\n  return redirect('some_route')-&gt;withErrors($validator);\n}<\/code><\/pre><p>&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>'conditional_field'<\/code>&#22914;&#26524;&#38656;&#35201;&#65292;&#35831;&#25552;&#20379;&#26356;&#22810;&#20449;&#24687;&#12290;<code>'some_field'<\/code>&#31561;&#20110;<code>'some_value'<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><h2>&#33258;&#23450;&#20041;&#39564;&#35777;&#28040;&#24687;<\/h2><p>&#23450;&#20041;&#33258;&#23450;&#20041;&#28040;&#24687;&#23545;&#20110;&#33258;&#23450;&#20041;&#35268;&#21017;&#26469;&#35828;&#20063;&#19981;&#21487;&#24573;&#35270;&#65292;&#22240;&#20026;&#23427;&#33021;&#20026;&#29992;&#25143;&#25552;&#20379;&#26356;&#28165;&#26224;&#30340;&#21453;&#39304;&#12290;&#22312;&#21019;&#24314;Rule&#23545;&#35937;&#26102;&#65292;&#24212;&#35813;&#32771;&#34385;&#36825;&#19968;&#28857;&#12290;<code>message<\/code>&#35813;&#26041;&#27861;&#20801;&#35768;&#24744;&#25351;&#23450;&#39564;&#35777;&#22833;&#36133;&#26102;&#36820;&#22238;&#30340;&#21453;&#39304;&#28040;&#24687;&#12290;<\/p><p>&#20363;&#22914;&#65292;&#24403;&#20351;&#29992;&#38381;&#21253;&#26102;&#65292;&#24744;&#21487;&#20197;&#23450;&#20041;&#33258;&#23450;&#20041;&#28040;&#24687;&#20197;&#28155;&#21152;&#21040;&#39564;&#35777;&#36923;&#36753;&#20013;&#65306;<\/p><pre><code>$messages = [\n  'custom_rule' =&gt; 'The :attribute must meet custom rule requirements.',\n];\n\n$validator = Validator::make($request-&gt;all(), [...], $messages);\n<\/code><\/pre><p>&#36825;&#37324;&#26159;&#12290;<code>:attribute<\/code>&#36755;&#20837;&#23383;&#27573;&#39564;&#35777;&#26102;&#65292;&#23427;&#26159;&#19968;&#20010;&#21344;&#20301;&#31526;&#65292;&#29992;&#20110;&#23384;&#20648;&#23454;&#38469;&#30340;&#36755;&#20837;&#23383;&#27573;&#21517;&#31216;&#12290;&#24403;Laravel&#22788;&#29702;&#38169;&#35823;&#28040;&#24687;&#26102;&#65292;&#20250;&#33258;&#21160;&#23558;&#20854;&#26367;&#25442;&#20026;&#23454;&#38469;&#30340;&#21517;&#31216;&#12290;<\/p><h2>&#38169;&#35823;&#22788;&#29702;&#21644;&#26174;&#31034;<\/h2><p>&#22312;&#23450;&#20041;&#33258;&#23450;&#20041;&#35268;&#21017;&#21518;&#65292;&#37325;&#35201;&#30340;&#26159;&#35201;&#32771;&#34385;&#22914;&#20309;&#22788;&#29702;&#21644;&#26174;&#31034;&#39564;&#35777;&#38169;&#35823;&#12290;Laravel &#25552;&#20379;&#20102;&#22810;&#31181;&#26041;&#27861;&#26469;&#33719;&#21462;&#21644;&#26174;&#31034;&#38169;&#35823;&#28040;&#24687;&#12290;<\/p><p>&#20320;&#21487;&#20197;&#25226;&#38169;&#35823;&#36820;&#22238;&#21040;&#35270;&#22270;&#65292;&#28982;&#21518;&#20351;&#29992;&#23427;&#20204;&#12290;<code>$errors<\/code>&#21464;&#37327;&#26159;&#29992;&#26469;&#26174;&#31034;&#20182;&#20204;&#30340;&#65306;<\/p><pre><code>@if ($errors-&gt;any())<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#20320;&#30340;&#24847;&#24605;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#20320;&#30340;&#38382;&#39064;&#25110;&#35831;&#27714;&#12290;<\/p><pre><code>\n@endif<\/code><\/pre><p>&#22312;JSON API&#20013;&#65292;&#24744;&#21487;&#20197;&#36820;&#22238;&#21709;&#24212;&#20013;&#30340;&#38169;&#35823;&#65306;<\/p><pre><code>if ($validator-&gt;fails()) {\n  return response()-&gt;json(['errors' =&gt; $validator-&gt;messages()], 422);\n}<\/code><\/pre><p>Laravel &#25552;&#20379;&#20102;&#33258;&#23450;&#20041;&#26684;&#24335;&#38169;&#35823;&#28040;&#24687;&#30340;&#33021;&#21147;&#65292;&#36890;&#36807;&#22312;&#26381;&#21153;&#25552;&#20379;&#32773;&#20013;&#25351;&#23450;&#33258;&#23450;&#20041;&#26684;&#24335;&#22120;&#26469;&#23454;&#29616;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#26377;&#26102;&#65292;Laravel&#20869;&#32622;&#30340;&#35268;&#21017;&#21487;&#33021;&#19981;&#36275;&#20197;&#28385;&#36275;&#38656;&#27714;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#33258;&#23450;&#20041;&#39564;&#35777;&#20197;&#21305;&#37197;&#29420;&#29305;&#30340;&#19994;&#21153;&#36923;&#36753;&#12290;&#27491;&#22914;&#36825;&#20123;&#31034;&#20363;&#25152;&#31034;&#65292;Laravel&#25552;&#20379;&#20102;&#20960;&#31181;&#26041;&#27861;&#26469;&#24212;&#29992;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#65292;&#36825;&#20123;&#35268;&#21017;&#30452;&#35266;&#19988;&#21487;&#25193;&#23637;&#12290;<\/p><p>&#35760;&#24471;&#65292;&#39564;&#35777;&#22312;&#20219;&#20309;&#24212;&#29992;&#24320;&#21457;&#36807;&#31243;&#20013;&#37117;&#26159;&#33267;&#20851;&#37325;&#35201;&#30340;&#37096;&#20998;&#65292;&#25237;&#36164;&#26102;&#38388;&#26469;&#31934;&#28860;&#23427;&#21487;&#20197;&#20351;&#24744;&#31163;&#20248;&#36136;&#29992;&#25143;&#20307;&#39564;&#21644;&#23433;&#20840;&#24212;&#29992;&#31243;&#24207;&#26356;&#36817;&#19968;&#27493;&#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>Laravel &#26159;&#19968;&#20010;&#36731;&#37327;&#32423;&#30340;&#26694;&#26550;&#65292;&#38750;&#24120;&#36866;&#21512;&#24555;&#36895;&#26500;&#24314; Web &#24212;&#29992;&#31243;&#24207;&#12290;&#35201;&#20026; Laravel &#28155;&#21152;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; Laravel &#30340;&#39564;&#35777;&#22120;&#21151;&#33021;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#21019;&#24314;&#24182;&#20351;&#29992;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#30340;&#19968;&#20123;&#24314;&#35758;&#12290;<\/p>\n<h3>&#21019;&#24314;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h3>\n<ol>\n<li>&#39318;&#20808;&#65292;&#30830;&#20445;&#23433;&#35013;&#20102; Laravel&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">composer require laravel\/laravel<\/code><\/pre>\n<ol start=\"2\">\n<li>&#22312;&#39033;&#30446;&#30340; <code>app\/Http\/Kernel.php<\/code> &#25991;&#20214;&#20013;&#23548;&#20837;&#39564;&#35777;&#22120;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttp;\n\nuse IlluminateFoundationHttpKernel as HttpKernel;\nuse IlluminateSupportFacadesRoute;\n\nclass Kernel extends HttpKernel\n{\n    protected $middlewareGroups = [\n        'web' =&gt; [],\n        'api' =&gt; [\n            \/\/ &#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;\n            'auth',\n            'verified',\n        ],\n    ];\n\n    protected function providesHttpScope()\n    {\n        return ['api'];\n    }\n\n    protected function providesHttpMethodScope()\n    {\n        return ['*'];\n    }\n}<\/code><\/pre>\n<ol start=\"3\">\n<li>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>CustomValidator.php<\/code> &#30340;&#26032;&#25991;&#20214;&#65292;&#24182;&#32534;&#20889;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttpValidator;\n\nuse IlluminateContractsValidationValidator;\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateValidationRule;\n\nclass CustomValidator extends Validator\n{\n    \/**\n     * Determine if the model is valid.\n     *\n     * @param  Model  $model\n     * @return bool\n     *\/\n    public function validate(Model $model)\n    {\n        $this-&gt;afterValidation(function ($validator) use ($model) {\n            \/\/ &#26816;&#26597;&#23383;&#27573;&#26159;&#21542;&#20026;&#31354;\n            $validator-&gt;messages()-&gt;assertNotEmpty($model-&gt;column_name, \"This field cannot be empty.\");\n        });\n\n        return parent::validate($model);\n    }\n}\n\n\/\/ &#31034;&#20363;&#65306;&#26816;&#26597;&#37038;&#31665;&#22320;&#22336;&#26159;&#21542;&#26377;&#25928;\n$customValidator = new CustomValidator();\n$validator = $customValidator-&gt;make(['email' =&gt; 'test@example.com'], []);\nif ($validator-&gt;fails()) {\n    echo json_encode($validator-&gt;errors());\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>&#20445;&#23384;&#26356;&#25913;&#21518;&#65292;&#38656;&#35201;&#23558;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#24212;&#29992;&#20110;&#24212;&#29992;&#30340;&#25152;&#26377;&#25511;&#21046;&#22120;&#21644;&#36335;&#30001;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::group(['prefix' =&gt; 'admin', 'middleware' =&gt; 'admin'], function () {\n    Route::get('users\/{id}', 'UsersController@show')-&gt;name('show');\n});<\/code><\/pre>\n<ol start=\"5\">\n<li>&#35843;&#35797;&#24212;&#29992;&#31243;&#24207;&#65292;&#30830;&#20445;&#22312;&#25511;&#21046;&#22120;&#26174;&#31034;&#39029;&#38754;&#26102;&#27491;&#30830;&#22320;&#26174;&#31034;&#20102;&#38169;&#35823;&#28040;&#24687;&#12290;<\/li>\n<\/ol>\n<h3>&#20351;&#29992;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h3>\n<p>&#29616;&#22312;&#65292;&#24403;&#20320;&#23581;&#35797;&#35775;&#38382;&#24102;&#26377;&#26410;&#22635;&#20889;&#30005;&#23376;&#37038;&#20214;&#23383;&#27573;&#30340;&#29992;&#25143;&#21015;&#34920;&#39029;&#38754;&#26102;&#65292;&#23558;&#20250;&#25910;&#21040;&#20197;&#19979;&#38169;&#35823;&#28040;&#24687;&#65306;<\/p>\n<pre><code class=\"language-json\">[\n    {\n        \"field\": \"email\",\n        \"message\": \"This field cannot be empty.\",\n        \"input\": \"test@example.com\"\n    }\n]<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#26681;&#25454;&#19994;&#21153;&#38656;&#27714;&#33258;&#23450;&#20041; Laravel &#30340;&#39564;&#35777;&#36923;&#36753;&#12290;&#36825;&#26377;&#21161;&#20110;&#25552;&#39640;&#23433;&#20840;&#24615;&#65292;&#24182;&#20801;&#35768;&#24320;&#21457;&#32773;&#38024;&#23545;&#29305;&#23450;&#24773;&#20917;&#35843;&#25972;&#39564;&#35777;&#35268;&#21017;&#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;&#28155;&#21152;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#21487;&#20197;&#24110;&#21161;&#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-906","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\/906","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=906"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=906"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=906"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}