{"id":857,"date":"2025-06-12T01:17:12","date_gmt":"2025-06-11T17:17:12","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/857.html"},"modified":"2025-06-12T01:17:12","modified_gmt":"2025-06-11T17:17:12","slug":"laravel%e4%b8%ad%e7%9a%84%e8%a7%82%e5%af%9f%e8%80%85%e5%92%8c%e4%ba%8b%e4%bb%b6%e7%9b%91%e5%90%ac%e5%99%a8%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\/857.html","title":{"rendered":"Laravel\u4e2d\u7684\u89c2\u5bdf\u8005\u548c\u4e8b\u4ef6\u76d1\u542c\u5668\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>&#12298;Laravel&#20013;&#30340;&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#65306;&#23454;&#29992;&#25351;&#21335;&#12299;<\/p>\n<p>&#22312;&#29616;&#20195;&#36719;&#20214;&#24320;&#21457;&#20013;&#65292;&#35266;&#23519;&#32773;&#27169;&#24335;&#65288;Observer Pattern&#65289;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#65288;Event Listeners&#65289;&#26159;&#20004;&#31181;&#38750;&#24120;&#26377;&#29992;&#30340;&#35774;&#35745;&#27169;&#24335;&#65292;&#23427;&#20204;&#21487;&#20197;&#24110;&#21161;&#25105;&#20204;&#26356;&#22909;&#22320;&#32452;&#32455;&#20195;&#30721;&#12289;&#23454;&#29616;&#26494;&#32806;&#21512;&#30340;&#31995;&#32479;&#65292;&#24182;&#19988;&#31616;&#21270;&#20102;&#20107;&#20214;&#22788;&#29702;&#27969;&#31243;&#12290;<\/p>\n<h3>&#35266;&#23519;&#32773;&#27169;&#24335;<\/h3>\n<p>&#35266;&#23519;&#32773;&#27169;&#24335;&#26159;&#19968;&#31181;&#34892;&#20026;&#22411;&#35774;&#35745;&#27169;&#24335;&#65292;&#23427;&#23450;&#20041;&#20102;&#19968;&#31181;&#19968;&#23545;&#22810;&#30340;&#20851;&#31995;&#65292;&#20351;&#24471;&#22810;&#20010;&#23545;&#35937;&#37117;&#21487;&#20197;&#30456;&#20114;&#20851;&#27880;&#26576;&#20010;&#20027;&#39064;&#30340;&#21464;&#21270;&#65292;&#24182;&#19988;&#24403;&#20027;&#39064;&#30340;&#29366;&#24577;&#21457;&#29983;&#21464;&#21270;&#26102;&#65292;&#25152;&#26377;&#27880;&#20876;&#30340;&#23545;&#35937;&#37117;&#20250;&#34987;&#36890;&#30693;&#24182;&#26356;&#26032;&#12290;<\/p>\n<h4>&#31034;&#20363;&#20195;&#30721;<\/h4>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#31616;&#21333;&#30340;&#21338;&#23458;&#24212;&#29992;&#65292;&#20854;&#20013;&#21253;&#21547;&#29992;&#25143;&#21644;&#25991;&#31456;&#20004;&#20010;&#27169;&#22411;&#12290;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#35266;&#23519;&#32773;&#26469;&#36319;&#36394;&#29992;&#25143;&#30340;&#30331;&#24405;&#29366;&#24577;&#21464;&#21270;&#65292;&#24182;&#22312;&#29992;&#25143;&#30331;&#24405;&#26102;&#33258;&#21160;&#21457;&#24067;&#19968;&#26465;&#28040;&#24687;&#21040;&#26085;&#24535;&#25991;&#20214;&#20013;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ UserObserver.php\nnamespace AppObservers;\n\nuse AppModelsUser;\nuse IlluminateSupportFacadesLog;\n\nclass UserObserver\n{\n    public function created(User $user)\n    {\n        Log::info('User ' . $user-&gt;name . ' logged in');\n    }\n\n    public function updated(User $user)\n    {\n        \/\/ &#22788;&#29702;&#26356;&#26032;&#36923;&#36753;\n    }\n}<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#22312; <code>User<\/code> &#27169;&#22411;&#20013;&#27880;&#20876;&#36825;&#20010;&#35266;&#23519;&#32773;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ User.php\nnamespace AppModels;\n\nuse IlluminateDatabaseEloquentModel;\nuse AppObserversUserObserver;\n\nclass User extends Model\n{\n    protected $fillable = ['name', 'email'];\n\n    public static function boot()\n    {\n        parent::boot();\n\n        User::observe(new UserObserver());\n    }\n}<\/code><\/pre>\n<h3>&#20107;&#20214;&#30417;&#21548;&#22120;<\/h3>\n<p>&#20107;&#20214;&#30417;&#21548;&#22120;&#26159;&#19968;&#31181;&#26356;&#39640;&#32423;&#30340;&#35774;&#35745;&#27169;&#24335;&#65292;&#23427;&#20801;&#35768;&#25105;&#20204;&#22312;&#29305;&#23450;&#30340;&#20107;&#20214;&#21457;&#29983;&#26102;&#25191;&#34892;&#29305;&#23450;&#30340;&#25805;&#20316;&#12290;&#20107;&#20214;&#21487;&#20197;&#26159;&#24212;&#29992;&#31243;&#24207;&#20013;&#20219;&#20309;&#31867;&#22411;&#30340;&#20449;&#21495;&#65292;&#20363;&#22914;&#29992;&#25143;&#28857;&#20987;&#25353;&#38062;&#12289;&#25968;&#25454;&#20445;&#23384;&#25104;&#21151;&#31561;&#12290;<\/p>\n<h4>&#31034;&#20363;&#20195;&#30721;<\/h4>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21338;&#23458;&#24212;&#29992;&#65292;&#20854;&#20013;&#21253;&#21547;&#29992;&#25143;&#35780;&#35770;&#27169;&#22411;&#12290;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#20107;&#20214;&#30417;&#21548;&#22120;&#26469;&#35760;&#24405;&#27599;&#20010;&#35780;&#35770;&#30340;&#21457;&#24067;&#26102;&#38388;&#65292;&#24182;&#23558;&#36825;&#20123;&#20449;&#24687;&#23384;&#20648;&#22312;&#19968;&#20010;&#26085;&#24535;&#34920;&#20013;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ CommentCreatedListener.php\nnamespace AppListeners;\n\nuse AppEventsCommentCreated;\nuse IlluminateSupportFacadesDB;\n\nclass CommentCreatedListener\n{\n    public function handle(CommentCreated $event)\n    {\n        DB::table('comment_logs')-&gt;insert([\n            'comment_id' =&gt; $event-&gt;comment-&gt;id,\n            'created_at' =&gt; $event-&gt;comment-&gt;created_at,\n        ]);\n    }\n}<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#22312; <code>CommentCreated<\/code> &#20107;&#20214;&#31867;&#20013;&#27880;&#20876;&#36825;&#20010;&#20107;&#20214;&#30417;&#21548;&#22120;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ CommentCreated.php\nnamespace AppEvents;\n\nuse IlluminateFoundationEventsDispatchable;\nuse IlluminateQueueSerializesModels;\n\nclass CommentCreated extends Dispatchable\n{\n    use SerializesModels;\n\n    public $comment;\n\n    public function __construct($comment)\n    {\n        $this-&gt;comment = $comment;\n    }\n}<\/code><\/pre>\n<p>&#26368;&#21518;&#65292;&#22312;&#25511;&#21046;&#22120;&#20013;&#35302;&#21457;&#36825;&#20010;&#20107;&#20214;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ CommentsController.php\nnamespace AppHttpControllers;\n\nuse AppEventsCommentCreated;\nuse AppModelsComment;\n\nclass CommentsController extends Controller\n{\n    public function store(Request $request)\n    {\n        $comment = Comment::create($request-&gt;all());\n\n        event(new CommentCreated($comment));\n\n        return redirect()-&gt;back();\n    }\n}<\/code><\/pre>\n<p>&#36890;&#36807;&#20351;&#29992;&#35266;&#23519;&#32773;&#27169;&#24335;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#65292;&#25105;&#20204;&#21487;&#20197;&#26356;&#26377;&#25928;&#22320;&#31649;&#29702;&#31995;&#32479;&#30340;&#29366;&#24577;&#21464;&#21270;&#65292;&#25552;&#39640;&#20195;&#30721;&#30340;&#21487;&#32500;&#25252;&#24615;&#21644;&#25193;&#23637;&#24615;&#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;&#26500;&#24314;&#20855;&#26377;&#24377;&#24615;&#30340; Laravel &#24212;&#29992;&#31243;&#24207;&#26102;&#65292;&#29702;&#35299;&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#21487;&#20197;&#26497;&#22823;&#22320;&#22686;&#24378;&#24212;&#29992;&#31243;&#24207;&#30340;&#26550;&#26500;&#65292;&#36890;&#36807;&#20419;&#36827;&#24178;&#20928;&#30340;&#20195;&#30721;&#21644;&#27169;&#22359;&#21270;&#30340;&#35774;&#35745;&#27169;&#24335;&#26469;&#23454;&#29616;&#36825;&#19968;&#30446;&#26631;&#12290;&#26412;&#25945;&#31243;&#23558;&#25351;&#23548;&#24744;&#20351;&#29992;&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#30340;&#24378;&#22823;&#21151;&#33021;&#65292;&#24182;&#36890;&#36807;&#23454;&#38469;&#31034;&#20363;&#36827;&#34892;&#25805;&#20316;&#65292;&#20197;&#25552;&#39640;&#24744;&#30340; Laravel &#24320;&#21457;&#19987;&#19994;&#30693;&#35782;&#21644;&#24037;&#20316;&#25928;&#29575;&#12290;<\/p><h2>&#29702;&#35299;&#20107;&#20214;&#21644;&#30417;&#21548;&#22120;<\/h2><p>&#22312;&#28145;&#20837;&#20195;&#30721;&#31034;&#20363;&#20043;&#21069;&#65292;&#24517;&#39035;&#24314;&#31435;&#23545;&#20107;&#20214;&#21644;&#30417;&#21548;&#22120;&#30340;&#22522;&#26412;&#29702;&#35299;&#12290;&#20107;&#20214;&#26159;&#22312;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#20869;&#37096;&#21457;&#29983;&#30340;&#23454;&#20363;&#65292;&#21487;&#33021;&#26159;&#30001;&#20110;&#29992;&#25143;&#20132;&#20114;&#25110;&#30001;&#24212;&#29992;&#31243;&#24207;&#26412;&#36523;&#35302;&#21457;&#30340;&#12290;&#30456;&#24212;&#22320;&#65292;&#20107;&#20214;&#30417;&#21548;&#32773;&ldquo;&#30417;&#21548;&rdquo;&#36825;&#20123;&#20107;&#20214;&#24182;&#26681;&#25454;&#23427;&#20204;&#25191;&#34892;&#20195;&#30721;&#12290;<\/p><p>&#22522;&#26412;&#20107;&#20214;&#31034;&#20363;&#65306;<\/p><pre><code>Event::dispatch('user.created', $user);<\/code><\/pre><p>&#22522;&#26412;&#20107;&#20214;&#30417;&#21548;&#22120;&#65306;<\/p><pre><code>Event::listen('user.created', function ($user) {\n    \/\/ Code to execute when a user is created\n});<\/code><\/pre><h2>&#35774;&#32622;&#35266;&#23519;&#32773;<\/h2><p>&#22312;Laravel&#20013;&#21019;&#24314;&#35266;&#23519;&#32773;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;artisan&#21629;&#20196;&#12290;&#20197;&#19979;&#26159;&#20026;&#29992;&#25143;&#27169;&#22411;&#29983;&#25104;&#35266;&#23519;&#32773;&#30340;&#27493;&#39588;&#12290;<\/p><pre><code>php artisan make:observer UserObserver --model=User<\/code><\/pre><p>&#35813;&#21629;&#20196;&#23558;&#22312; app\/Observers &#30446;&#24405;&#19979;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#35266;&#23519;&#32773;&#31867;&#12290;&#20197;&#19979;&#26159;&#22788;&#29702;&#21508;&#31181;&#29992;&#25143;&#30456;&#20851;&#20107;&#20214;&#30340;&#31034;&#20363;&#12290;<\/p><pre><code>class UserObserver {\n    public function created(User $user) {\n        \/\/ User created logic\n    }\n\n    public function updated(User $user) {\n        \/\/ User updated logic\n    }\n}\n<\/code><\/pre><p>&#20026;&#20102;&#27880;&#20876;&#35266;&#23519;&#32773;&#65292;&#38656;&#35201;&#22312;&#26381;&#21153;&#25552;&#20379;&#32773;&#30340;&#21551;&#21160;&#26041;&#27861;&#20013;&#28155;&#21152;&#20197;&#19979;&#34892;&#65306;<\/p><pre><code>public function boot()\n{\n    User::observe(UserObserver::class);\n}\n<\/code><\/pre><h2>&#39640;&#32423;&#20107;&#20214;&#21644;&#30417;&#21548;&#22120;&#37197;&#32622;<\/h2><p>&#22312;&#26356;&#22797;&#26434;&#30340;&#22330;&#26223;&#19979;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#20197;&#26356;&#32454;&#31890;&#24230;&#21644;&#21487;&#25193;&#23637;&#30340;&#26041;&#24335;&#23450;&#20041;&#20107;&#20214;&#12290;Laravel &#20801;&#35768;&#24744;&#35774;&#32622;&#20107;&#20214;&#31867;&#65292;&#36825;&#38750;&#24120;&#24378;&#22823;&#12290;<\/p><p>&#21019;&#24314;&#33258;&#23450;&#20041;&#20107;&#20214;&#31867;&#65306;<\/p><pre><code>php artisan make:event UserCreated<\/code><\/pre><p>&#36825;&#23558;&#29983;&#25104;&#19968;&#20010;&#26032;&#30340;&#20107;&#20214;&#31867;&#65292;&#20854;&#20013;&#20320;&#21487;&#20197;&#23450;&#20041;&#26500;&#36896;&#21442;&#25968;&#20197;&#21450;&#20854;&#20182;&#24517;&#35201;&#30340;&#26041;&#27861;&#20197;&#28385;&#36275;&#24212;&#29992;&#31243;&#24207;&#36923;&#36753;&#38656;&#27714;&#12290;<\/p><pre><code>use AppModelsUser;\n\nclass UserCreated {\n    public $user;\n\n    public function __construct(User $user) {\n        $this-&gt;user = $user;\n    }\n}<\/code><\/pre><p>&#21019;&#24314;&#19968;&#20010;&#20107;&#20214;&#30417;&#21548;&#22120;&#65306;<\/p><pre><code>php artisan make:listener SendWelcomeEmail --event=UserCreated<\/code><\/pre><p>&#36825;&#23558;&#29983;&#25104;&#19968;&#20010;&#22788;&#29702;&ldquo;&#29992;&#25143;&#21019;&#24314;&rdquo;&#20107;&#20214;&#30340;&#30417;&#21548;&#22120;&#12290;&#30417;&#21548;&#22120;&#31867;&#21487;&#33021;&#22914;&#19979;&#25152;&#31034;&#65306;<\/p><pre><code>use AppEventsUserCreated;\n\nclass SendWelcomeEmail {\n    public function handle(UserCreated $event) {\n        \/\/ Send email to $event-&gt;user\n    }\n}<\/code><\/pre><h2>&#30417;&#21548;&#25490;&#38431;&#20107;&#20214;<\/h2><p>Laravel&#30340;&#30417;&#21548;&#22120;&#20043;&#32654;&#22312;&#20110;&#23427;&#20204;&#21487;&#20197;&#25490;&#38431;&#65292;&#36825;&#24847;&#21619;&#30528;&#21487;&#20197;&#21518;&#21488;&#22788;&#29702;&#23494;&#38598;&#22411;&#20219;&#21153;&#65292;&#32780;&#19981;&#25171;&#26029;&#29992;&#25143;&#20307;&#39564;&#12290;&#20363;&#22914;&#65292;&#20320;&#21487;&#20197;&#20687;&#36825;&#26679;&#38431;&#21015;&#30417;&#21548;&#22120;&#65306;&#22312;&#35831;&#27714;&#29983;&#21629;&#21608;&#26399;&#20013;&#30340;&#20219;&#20309;&#26102;&#38388;&#28857;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#26159;&#19981;&#21487;&#33021;&#30340;&#12290;<\/p><pre><code>class SendWelcomeEmail implements ShouldQueue {\n    use InteractsWithQueue;\n\n    public function handle(UserCreated $event) {\n        \/\/ Logic to send welcome email\n    }\n}<\/code><\/pre><p>&#32467;&#26524;&#65306;&#22312;&#35302;&#21457;&#20107;&#20214;&#21518;&#21518;&#21488;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#65292;&#19981;&#20250;&#24433;&#21709;&#33050;&#26412;&#30340;&#25191;&#34892;&#12290;<\/p><h2>&#26368;&#20339;&#23454;&#36341;&#21644;&#25216;&#24039;<\/h2><p>&#20026;&#20102;&#36827;&#19968;&#27493;&#21152;&#24378;&#24744;&#23545;Laravel&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#30340;&#29702;&#35299;&#65292;&#35831;&#21442;&#32771;&#20197;&#19979;&#24314;&#35758;&#12290;<\/p><p>&#35760;&#24471;&#23545;&#20107;&#20214;&#21644;&#30417;&#21548;&#22120;&#36827;&#34892;&#24443;&#24213;&#30340;&#27979;&#35797;&#12290;<\/p><p>&#22987;&#32456;&#32771;&#34385;&#27599;&#20010;&#35266;&#23519;&#32773;&#25110;&#21548;&#20247;&#30340;&#36131;&#20219;&#12290;&#36981;&#24490;&#21333;&#19968;&#32844;&#36131;&#21407;&#21017;&#65288;SRP&#65289;&#26377;&#21161;&#20110;&#20445;&#25345;&#20195;&#30721;&#21487;&#32500;&#25252;&#24615;&#12290;<\/p><p>&#20107;&#20214;&#21644;&#30417;&#21548;&#22120;&#26368;&#36866;&#21512;&#29992;&#20110;&#19982;Eloquent&#27169;&#22411;&#26080;&#20851;&#30340;&#22312;&#24212;&#29992;&#20013;&#21457;&#29983;&#30340;&#38750;&#30452;&#25509;&#25805;&#20316;&#12290;<\/p><p>&#20351;&#29992;&#35266;&#23519;&#32773;&#27169;&#24335;&#26469;&#22788;&#29702;Eloquent&#30456;&#20851;&#30340;&#36923;&#36753;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#22312;Laravel&#20013;&#25552;&#20379;&#20102;&#19968;&#31181;&#20445;&#25345;&#20195;&#30721;&#25972;&#27905;&#19988;&#21709;&#24212;&#24555;&#36895;&#30340;&#26041;&#27861;&#12290;&#36890;&#36807;&#36981;&#24490;&#26412;&#25945;&#31243;&#20013;&#30340;&#21407;&#21017;&#65292;&#24744;&#24212;&#35813;&#33021;&#22815;&#26500;&#24314;&#26356;&#21152;&#21487;&#31649;&#29702;&#12289;&#21487;&#25193;&#23637;&#30340;Laravel&#24212;&#29992;&#31243;&#24207;&#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>&#35266;&#23519;&#32773;&#65288;Observer&#65289;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#65288;Event Listener&#65289;&#26159; Laravel &#20013;&#38750;&#24120;&#26377;&#29992;&#30340;&#24037;&#20855;&#65292;&#29992;&#20110;&#22788;&#29702;&#22806;&#37096;&#26356;&#25913;&#25110;&#20107;&#20214;&#12290;&#36825;&#20123;&#21151;&#33021;&#21487;&#20197;&#24110;&#21161;&#25105;&#20204;&#26356;&#26377;&#25928;&#22320;&#31649;&#29702;&#19994;&#21153;&#36923;&#36753;&#65292;&#30830;&#20445;&#24212;&#29992;&#31243;&#24207;&#30340;&#20581;&#22766;&#24615;&#21644;&#21709;&#24212;&#24615;&#12290;<\/p>\n<h3>&#35266;&#23519;&#32773;<\/h3>\n<p>&#35266;&#23519;&#32773;&#20801;&#35768;&#24744;&#27880;&#20876;&#24182;&#30417;&#21548;&#29305;&#23450;&#31867;&#25110;&#26041;&#27861;&#30340;&#21464;&#21270;&#12290;Laravel &#30340; Observer &#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#26041;&#24335;&#23454;&#29616;&#65306;<\/p>\n<ol>\n<li>\n<p><strong>&#23450;&#20041;&#35266;&#23519;&#32773;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">class UserObserver extends Observer\n{\n   protected $events = [\n       'User::created',\n       'User::updated',\n       'User::deleted',\n   ];\n\n   public function listen(User $event)\n   {\n       \/\/ &#22788;&#29702;&#29992;&#25143;&#21019;&#24314;&#12289;&#26356;&#26032;&#25110;&#21024;&#38500;&#30340;&#36923;&#36753;\n       if ($event-&gt;getAction() == 'created') {\n           \/\/ &#29992;&#25143;&#21019;&#24314;&#26102;&#35302;&#21457;&#30340;&#36923;&#36753;\n           echo \"New user created: \" . $event-&gt;getUser()-&gt;name;\n       } elseif ($event-&gt;getAction() == 'updated') {\n           \/\/ &#29992;&#25143;&#26356;&#26032;&#26102;&#35302;&#21457;&#30340;&#36923;&#36753;\n           echo \"User updated: \" . $event-&gt;getUser()-&gt;name;\n       }\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#20351;&#29992;&#35266;&#23519;&#32773;<\/strong>&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ &#20351;&#29992;&#35266;&#23519;&#32773;&#26469;&#22788;&#29702;&#20107;&#20214;\n$observer = new UserObserver();\nEvent::listen('User::created', function ($event) use ($observer) {\n   $observer-&gt;handleUserCreated($event);\n});\n\nfunction handleUserCreated($event)\n{\n   \/\/ &#20174;&#36825;&#37324;&#24320;&#22987;&#22788;&#29702;&#29992;&#25143;&#21019;&#24314;&#20107;&#20214;\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>&#20107;&#20214;&#30417;&#21548;&#22120;<\/h3>\n<p>&#20107;&#20214;&#30417;&#21548;&#22120;&#20801;&#35768;&#24744;&#20026; Laravel &#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#29305;&#23450;&#20107;&#20214;&#27880;&#20876;&#22238;&#35843;&#20989;&#25968;&#12290;&#36825;&#36890;&#24120;&#29992;&#20110;&#22312;&#26576;&#20123;&#25805;&#20316;&#21457;&#29983;&#21518;&#25191;&#34892;&#19968;&#20123;&#39069;&#22806;&#30340;&#25805;&#20316;&#65292;&#20363;&#22914;&#29992;&#25143;&#30331;&#24405;&#12289;&#26435;&#38480;&#21464;&#26356;&#31561;&#12290;<\/p>\n<pre><code class=\"language-php\">class AuthController\n{\n    \/**\n     * Handle the incoming request.\n     *\n     * @param IlluminateHttpRequest $request\n     * @return IlluminateHttpResponse\n     *\/\n    public function store(Request $request)\n    {\n        event(new StoreUser($request));\n    }\n\n    \/**\n     * Handle the authenticated response.\n     *\n     * @param IlluminateHttpRequest $request\n     * @return IlluminateHttpResponse\n     *\/\n    public function show(Request $request)\n    {\n        event(new ShowUser($request));\n\n        return view('show');\n    }\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>UserService<\/code> &#30340;&#26381;&#21153;&#23618;&#65292;&#23427;&#26377;&#19968;&#20010;&#21517;&#20026; <code>createUser<\/code> &#30340;&#26041;&#27861;&#38656;&#35201;&#34987;&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#30417;&#21548;&#12290;&#25105;&#20204;&#21487;&#20197;&#36825;&#26679;&#20462;&#25913; <code>UserService<\/code> &#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">public function createUser()\n{\n    $this-&gt;dispatch(function () {\n        $user = new User();\n        $user-&gt;name = 'John Doe';\n        $user-&gt;email = 'john@example.com';\n\n        DB::table('users')-&gt;insert($user-&gt;toArray());\n    });\n}\n\n\/\/ &#35266;&#23519;&#32773;\nuse IlluminateSupportFacadesEvent;\n\nclass UserService\n{\n    private $userObserver;\n\n    public function __construct()\n    {\n        $this-&gt;userObserver = new UserObserver();\n    }\n\n    public function create()\n    {\n        $this-&gt;userObserver-&gt;listen('User::created', function ($event) {\n            $newUser = $event-&gt;getSubject();\n\n            \/\/ &#22788;&#29702;&#26032;&#29992;&#25143;&#30340;&#36923;&#36753;\n            if ($newUser-&gt;isAdministrator()) {\n                \/\/ &#28155;&#21152;&#31649;&#29702;&#21592;&#35282;&#33394;\n                $newUser-&gt;assignRole('administrator');\n            }\n        });\n    }\n}<\/code><\/pre>\n<p>&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992; Laravel &#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#26469;&#22788;&#29702;&#25968;&#25454;&#24211;&#25805;&#20316;&#12290;&#35266;&#23519;&#32773;&#27880;&#20876;&#20102;&#19968;&#20010;&#21517;&#20026; <code>User::created<\/code> &#30340;&#20107;&#20214;&#30417;&#21548;&#22120;&#65292;&#24182;&#23558;&#26032;&#30340;&#29992;&#25143;&#28155;&#21152;&#21040;&#25968;&#25454;&#24211;&#20013;&#12290;&#21516;&#26102;&#65292;&#25105;&#20204;&#36824;&#23637;&#31034;&#20102;&#22914;&#20309;&#25163;&#21160;&#27880;&#20876;&#21644;&#37197;&#32622;&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#30340;&#21151;&#33021;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#12298;Laravel&#20013;&#30340;&#35266;&#23519;&#32773;&#21644;&#20107;&#20214;&#30417;&#21548;&#22120;&#65306;&#23454;&#29992;&#038;#253..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-857","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\/857","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=857"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=857"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=857"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}