{"id":858,"date":"2025-06-12T01:18:44","date_gmt":"2025-06-11T17:18:44","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/858.html"},"modified":"2025-06-12T01:18:44","modified_gmt":"2025-06-11T17:18:44","slug":"laravel-%e5%8f%91%e9%80%81%e5%b8%a6%e9%99%84%e4%bb%b6%e7%9a%84%e9%82%ae%e4%bb%b6","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/858.html","title":{"rendered":"Laravel: \u53d1\u9001\u5e26\u9644\u4ef6\u7684\u90ae\u4ef6"},"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>&#22909;&#30340;&#65292;&#19979;&#38754;&#26159;&#22914;&#20309;&#20351;&#29992;Laravel&#26694;&#26550;&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#30005;&#23376;&#37038;&#20214;&#30340;&#35814;&#32454;&#27493;&#39588;&#12290;<\/p>\n<h3>1. &#23433;&#35013;Laravel<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102;Laravel&#12290;&#22914;&#26524;&#27809;&#26377;&#23433;&#35013;&#65292;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#21629;&#20196;&#36827;&#34892;&#23433;&#35013;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer create-project --prefer-dist laravel\/laravel my-laravel-app\ncd my-laravel-app<\/code><\/pre>\n<h3>2. &#37197;&#32622;&#37038;&#20214;&#26381;&#21153;<\/h3>\n<p>&#22312;<code>config\/mail.php<\/code>&#25991;&#20214;&#20013;&#37197;&#32622;&#20320;&#30340;&#37038;&#20214;&#26381;&#21153;&#25552;&#20379;&#21830;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#20320;&#20351;&#29992;&#30340;&#26159;SMTP&#26381;&#21153;&#65292;&#21487;&#20197;&#36825;&#26679;&#37197;&#32622;&#65306;<\/p>\n<pre><code class=\"language-php\">'host' =&gt; env('MAIL_HOST', 'smtp.example.com'),\n'port' =&gt; env('MAIL_PORT', 587),\n'encryption' =&gt; env('MAIL_ENCRYPTION', 'tls'),\n'user' =&gt; env('MAIL_USERNAME', ''),\n'password' =&gt; env('MAIL_PASSWORD', ''),\n'sendmail' =&gt; '\/usr\/sbin\/sendmail -bs',\n'markdown' =&gt; '.md',<\/code><\/pre>\n<h3>3. &#21019;&#24314;&#37038;&#20214;&#27169;&#26495;<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010;&#37038;&#20214;&#27169;&#26495;&#25991;&#20214;&#65292;&#20363;&#22914;<code>resources\/views\/mails\/attachment-email.blade.php<\/code>&#65306;<\/p>\n<pre><code class=\"language-blade\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;Attachment Email&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Hello {{ $name }}&lt;\/h1&gt;\n    &lt;p&gt;This is an email with an attachment.&lt;\/p&gt;\n\n    @if ($files)\n        &lt;h2&gt;Attachments:&lt;\/h2&gt;\n        &lt;ul&gt;\n            @foreach ($files as $file)\n                &lt;li&gt;{{ $file-&gt;getClientOriginalName() }}&lt;\/li&gt;\n            @endforeach\n        &lt;\/ul&gt;\n    @endif\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<h3>4. &#21019;&#24314;&#37038;&#20214;&#31867;<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010;&#37038;&#20214;&#31867;&#65292;&#20363;&#22914;<code>app\/Mail\/AttachmentEmail.php<\/code>&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppMail;\n\nuse IlluminateBusQueueable;\nuse IlluminateContractsQueueShouldQueue;\nuse IlluminateMailMailable;\nuse IlluminateSupportFacadesStorage;\nuse IlluminateQueueSerializesModels;\n\nclass AttachmentEmail extends Mailable\n{\n    use Queueable, SerializesModels;\n\n    public $name;\n    public $files;\n\n    \/**\n     * Create a new message instance.\n     *\n     * @return void\n     *\/\n    public function __construct($name, $files)\n    {\n        $this-&gt;name = $name;\n        $this-&gt;files = $files;\n    }\n\n    \/**\n     * Build the message.\n     *\n     * @return $this\n     *\/\n    public function build()\n    {\n        return $this-&gt;view('emails.attachment-email')\n                    -&gt;subject('Email with Attachment');\n    }\n}<\/code><\/pre>\n<h3>5. &#21457;&#36865;&#37038;&#20214;<\/h3>\n<p>&#22312;&#25511;&#21046;&#22120;&#20013;&#21457;&#36865;&#37038;&#20214;&#65292;&#20363;&#22914;<code>app\/Http\/Controllers\/MailController.php<\/code>&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppHttpControllers;\n\nuse AppMailAttachmentEmail;\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesMail;\n\nclass MailController extends Controller\n{\n    public function sendMail()\n    {\n        \/\/ &#31034;&#20363;&#25991;&#20214;&#36335;&#24452;\n        $files = [\n            Storage::disk('public')-&gt;path('example.pdf'),\n            Storage::disk('public')-&gt;path('example.jpg'),\n        ];\n\n        Mail::to('recipient@example.com')\n             -&gt;attach($files[0])\n             -&gt;attach($files[1], ['as' =&gt; 'another_file'])\n             -&gt;send(new AttachmentEmail('John Doe', $files));\n\n        return back()-&gt;with('success', 'Email sent successfully!');\n    }\n}<\/code><\/pre>\n<h3>6. &#27979;&#35797;&#37038;&#20214;<\/h3>\n<p>&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#27979;&#35797;&#37038;&#20214;&#26159;&#21542;&#25104;&#21151;&#21457;&#36865;&#65306;<\/p>\n<pre><code class=\"language-bash\">php artisan serve<\/code><\/pre>\n<p>&#28982;&#21518;&#25171;&#24320;&#27983;&#35272;&#22120;&#35775;&#38382;<code>http:\/\/localhost:8000\/mail\/send-mail<\/code>&#65292;&#20320;&#24212;&#35813;&#33021;&#22815;&#30475;&#21040;&#19968;&#23553;&#21253;&#21547;&#20004;&#20010;&#38468;&#20214;&#30340;&#30005;&#23376;&#37038;&#20214;&#34987;&#21457;&#36865;&#21040;&#25351;&#23450;&#30340;&#25910;&#20214;&#20154;&#12290;<\/p>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;Laravel&#26694;&#26550;&#36731;&#26494;&#22320;&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#30005;&#23376;&#37038;&#20214;&#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>&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#30005;&#23376;&#37038;&#20214;&#22312;&#29616;&#20195;Web&#24212;&#29992;&#31243;&#24207;&#20013;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#35201;&#27714;&#12290;Laravel&#65292;&#20316;&#20026;&#19968;&#20010;&#24378;&#22823;&#30340;PHP&#26694;&#26550;&#65292;&#25552;&#20379;&#20102;&#20351;&#29992;&#20869;&#32622;&#37038;&#20214;&#21151;&#33021;&#26080;&#32541;&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#24378;&#22823;&#35299;&#20915;&#26041;&#26696;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25351;&#23548;&#24744;&#36890;&#36807;&#22522;&#26412;&#31034;&#20363;&#36880;&#27493;&#23398;&#20064;&#22914;&#20309;&#22312;Laravel&#20013;&#21457;&#36865;&#19981;&#21516;&#31867;&#22411;&#30340;&#20869;&#23481;&#12290;<\/p><h2>&#35774;&#32622;&#30005;&#23376;&#37038;&#20214;&#37197;&#32622;<\/h2><p>&#22312;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#20043;&#21069;&#65292;&#24744;&#24517;&#39035;&#22312; Laravel &#20013;&#37197;&#32622;&#37038;&#20214;&#39537;&#21160;&#12290;&#32534;&#36753;&#24744;&#30340;<code>.env<\/code>&#35831;&#26597;&#30475;&#24182;&#35774;&#32622;&#27491;&#30830;&#30340;&#37038;&#20214;&#35774;&#32622;&#65306;<\/p><pre><code>MAIL_MAILER=smtp\nMAIL_HOST=smtp.mailtrap.io\nMAIL_PORT=2525\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\nMAIL_ENCRYPTION=null\nMAIL_FROM_ADDRESS=null\nMAIL_FROM_NAME=\"${APP_NAME}\"\n<\/code><\/pre><p>&#32534;&#36753;&#23436;&#21518;&#65292;<code>.env<\/code>&#35831;&#28165;&#38500;&#37197;&#32622;&#32531;&#23384;&#65292;&#35831;&#28165;&#31354;&#37197;&#32622;&#32531;&#23384;&#12290;<code>php artisan config:cache<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><h2>&#22522;&#26412;&#30340;&#30005;&#23376;&#37038;&#20214;&#65292;&#21253;&#21547;&#38468;&#20214;&#12290;<\/h2><p>&#35201;&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#22522;&#26412;&#30005;&#23376;&#37038;&#20214;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#12290;<code>Mail<\/code>&#25265;&#27465;&#65292;&#24744;&#30340;&#20449;&#24687;&#19981;&#23436;&#25972;&#65292;&#25105;&#26080;&#27861;&#29702;&#35299;&#24744;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;&#35831;&#25552;&#20379;&#26356;&#22810;&#20449;&#24687;&#25110;&#23436;&#25972;&#30340;&#21477;&#23376;&#12290;<code>mailable<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#24744;&#38656;&#35201;&#32763;&#35793;&#30340;&#20855;&#20307;&#20869;&#23481;&#65292;&#25105;&#26469;&#24110;&#24744;&#36827;&#34892;&#32763;&#35793;&#12290;<\/p><pre><code>use IlluminateSupportFacadesMail;\nuse AppMailInvoiceMail;\n\nMail::to('[email&nbsp;protected]')-&gt;send(new InvoiceMail());\n<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#26080;&#27861;&#29702;&#35299;&#36825;&#21477;&#35805;&#30340;&#24847;&#24605;&#12290;<code>InvoiceMail<\/code>&#31867;&#24212;&#32487;&#25215;&#20110;<code>IlluminateMailMailable<\/code>&#24182;&#19988;&#21253;&#25324;&#38468;&#20214;&#22312;&#20869;&#12290;<code>build<\/code>&#26041;&#27861;&#65306;<\/p><pre><code>use IlluminateMailMailable;\n\nclass InvoiceMail extends Mailable\n{\n    public function build()\n    {\n        return $this-&gt;subject('Your Invoice')-&gt;view('emails.invoice')-&gt;attach('\/path\/to\/invoice.pdf');\n    }\n}\n<\/code><\/pre><p>&#20320;&#24212;&#35813;&#29616;&#22312;&#26377;&#19968;&#20010;&#21517;&#20026;view&#30340;&#25991;&#20214;&#21517;&#12290;<code>invoice.blade.php<\/code>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#24744;&#30340;&#24847;&#24605;&#65292;&#35831;&#37325;&#26032;&#25551;&#36848;&#24744;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>resources\/views\/emails<\/code>&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><p>&#25910;&#20214;&#20154;&#24212;&#35813;&#25910;&#21040;&#19968;&#23553;&#38468;&#26377;PDF&#21457;&#31080;&#30340;&#30005;&#23376;&#37038;&#20214;&#12290;<\/p><h2>&#22810;&#20010;&#38468;&#20214;<\/h2><p>&#38468;&#20214;&#22810;&#25991;&#20214;&#21040;&#37038;&#20214;&#23601;&#20687;&#25226;&#22810;&#20010;&#25991;&#20214;&#38142;&#25509;&#22312;&#19968;&#36215;&#19968;&#26679;&#31616;&#21333;&#12290;<code>attach<\/code>&#26041;&#27861;&#65306;<\/p><pre><code>public function build()\n{\n    return $this-&gt;subject('Your Documents')-&gt;view('emails.documents')\n        -&gt;attach('\/path\/to\/first\/document.pdf')\n        -&gt;attach('\/path\/to\/second\/document.pdf');\n}\n<\/code><\/pre><p>&#27599;&#20010;&#20320;&#35201;&#28155;&#21152;&#30340;&#25991;&#20214;&#37117;&#21487;&#20197;&#21333;&#29420;&#28155;&#21152;&#12290;<code>attach<\/code>&#26469;&#30005;&#12290;&#30005;&#23376;&#37038;&#20214;&#20250;&#21253;&#21547;&#24744;&#24050;&#38468;&#19978;&#30340;&#20004;&#20221;&#25991;&#20214;&#12290;<\/p><h2>&#20174;&#21407;&#22987;&#25968;&#25454;&#20013;&#38468;&#21152;<\/h2><p>&#20320;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992;&#21407;&#22987;&#25968;&#25454;&#26469;&#38468;&#21152;&#25991;&#20214;&#12290;<code>attachData<\/code>&#26041;&#27861;&#65306;<\/p><pre><code>public function build()\n{\n    $content = '...'; \/\/ The raw data of your file\n    return $this-&gt;subject('Your Dynamic Document')-&gt;view('emails.dynamic')-&gt;attachData($content, 'dynamic-doc.pdf', [\n            'mime' =&gt; 'application\/pdf',\n        ]);\n}\n<\/code><\/pre><p>&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;<code>dynamic-doc.pdf<\/code>&#20316;&#20026;&#30005;&#23376;&#37038;&#20214;&#20013;&#26174;&#31034;&#30340;&#25991;&#20214;&#21517;&#12290;<\/p><h2>&#39640;&#32423;&#29992;&#27861;<\/h2><p>&#23545;&#20110;&#26356;&#39640;&#32423;&#30340;&#30005;&#23376;&#37038;&#20214;&#38468;&#20214;&#22330;&#26223;&#65292;&#22914;&#26681;&#25454;&#26465;&#20214;&#28155;&#21152;&#38468;&#20214;&#25110;&#22788;&#29702;&#22823;&#22411;&#25991;&#20214;&#65292;&#24744;&#21487;&#20197;&#23545;&#38468;&#20214;&#36807;&#31243;&#36827;&#34892;&#26356;&#21152;&#31934;&#32454;&#30340;&#25511;&#21046;&#12290;<\/p><pre><code>public function build()\n{\n    $email = $this-&gt;subject('Customized Documents')-&gt;view('emails.customized');\n    if ($condition) {\n        $email-&gt;attach('\/path\/to\/conditional\/document.pdf', [\n            'as' =&gt; 'custom-name.pdf',\n            'mime' =&gt; 'application\/pdf',\n        ]);\n    }\n    return $email;\n}\n<\/code><\/pre><p>&#22312;&#19978;&#36848;&#29255;&#27573;&#20013;&#65292;&#22914;&#26524;&#26465;&#20214;&#28385;&#36275;&#65292;&#21017;&#20250;&#22312;&#30005;&#23376;&#37038;&#20214;&#20013;&#38468;&#21152;&#19968;&#20010;&#38468;&#20214;&#65292;&#24182;&#19988;&#20250;&#20351;&#29992;&#33258;&#23450;&#20041;&#25991;&#20214;&#21517;&#21644;&#29305;&#23450;&#30340;MIME&#31867;&#22411;&#12290;<\/p><h2>&#20351;&#29992;&#38431;&#21015;&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#30005;&#23376;&#37038;&#20214;<\/h2><p>Laravel &#30340;&#38431;&#21015;&#31995;&#32479;&#21487;&#20197;&#23558;&#37038;&#20214;&#21457;&#36865;&#36807;&#31243;&#22996;&#25176;&#32473;&#20316;&#19994;&#65292;&#20174;&#32780;&#25552;&#39640;&#24212;&#29992;&#31243;&#24207;&#23545;&#26368;&#32456;&#29992;&#25143;&#30340;&#21709;&#24212;&#26102;&#38388;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#20351;&#29992;&#38468;&#20214;&#30340;&#38431;&#21015;&#21270;&#30005;&#23376;&#37038;&#20214;&#31034;&#20363;&#65306;<\/p><pre><code>use IlluminateBusQueueable;\nuse IlluminateQueueSerializesModels;\nuse IlluminateQueueInteractsWithQueue;\nuse IlluminateContractsQueueShouldQueue;\nuse IlluminateSupportFacadesMail;\n\nclass SendInvoiceEmailJob implements ShouldQueue\n{\n    use InteractsWithQueue, Queueable, SerializesModels;\n\n    public $invoice;\n\n    public function __construct($invoice)\n    {\n        $this-&gt;invoice = $invoice;\n    }\n\n    public function handle()\n    {\n        Mail::to('[email&nbsp;protected]')-&gt;send(new InvoiceMail($this-&gt;invoice));\n    }\n}\n<\/code><\/pre><p>&#20026;&#20102;&#22788;&#29702;&#36825;&#39033;&#24037;&#20316;&#65292;&#35831;&#20351;&#29992;&#20197;&#19979;&#20449;&#24687;&#65306;<\/p><pre><code>dispatch(new SendInvoiceEmailJob($invoice));\n<\/code><\/pre><p>&#24744;&#30340;&#37038;&#20214;&#23558;&#34987;&#21152;&#20837;&#38431;&#21015;&#24182;&#32972;&#26223;&#22788;&#29702;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#22312;Laravel&#20013;&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#30005;&#23376;&#37038;&#20214;&#26159;&#19968;&#39033;&#31616;&#21333;&#30340;&#20219;&#21153;&#65292;&#21487;&#20197;&#26681;&#25454;&#24744;&#30340;&#24212;&#29992;&#38656;&#27714;&#36827;&#34892;&#23450;&#21046;&#12290;&#26080;&#35770;&#26159;&#21457;&#36865;&#31616;&#21333;&#30340;&#36890;&#30693;&#36824;&#26159;&#21253;&#21547;&#22810;&#20010;&#38468;&#20214;&#30340;&#22797;&#26434;&#33258;&#21160;&#30005;&#23376;&#37038;&#20214;&#21709;&#24212;&#65292;Laravel&#37117;&#25552;&#20379;&#20102;&#19968;&#31181;&#25972;&#27905;&#19988;&#26131;&#20110;&#32500;&#25252;&#30340;&#26041;&#27861;&#12290;&#35831;&#21153;&#24517;&#22312;&#19978;&#32447;&#20043;&#21069;&#22312;&#23433;&#20840;&#29615;&#22659;&#20013;&#27979;&#35797;&#30005;&#23376;&#37038;&#20214;&#21151;&#33021;&#65292;&#20197;&#36991;&#20813;&#24847;&#22806;&#30340;&#25968;&#25454;&#27844;&#38706;&#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>&#35201;&#20351;&#29992; Laravel &#20026; Laravel &#24212;&#29992;&#31243;&#24207;&#21019;&#24314;&#19968;&#20010;&#24102;&#26377;&#38468;&#20214;&#30340;&#30005;&#23376;&#37038;&#20214;&#65292;&#35831;&#25353;&#29031;&#20197;&#19979;&#27493;&#39588;&#25805;&#20316;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; Laravel &#21644; Composer&#12290;<\/p>\n<\/li>\n<li>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340; Laravel &#24212;&#29992;&#23454;&#20363;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer create-project --prefer-dist laravel\/laravel my-app<\/code><\/pre>\n<\/li>\n<li>\n<p>&#36827;&#20837;&#39033;&#30446;&#30446;&#24405;&#24182;&#21021;&#22987;&#21270;&#25968;&#25454;&#24211;&#65306;<\/p>\n<pre><code class=\"language-bash\">cd my-app\nphp artisan db:seed --class=UsersTableSeeder<\/code><\/pre>\n<\/li>\n<li>\n<p>&#22312; <code>app\/Http\/Kernel.php<\/code> &#25991;&#20214;&#20013;&#21551;&#29992; Eloquent ORM&#65292;&#24182;&#28155;&#21152;&#38468;&#20214;&#25903;&#25345;&#65306;<\/p>\n<pre><code class=\"language-php\">\nprotected $middlewareGroups = [\n'auth' =&gt; [],\n\n\/\/ &#28155;&#21152;&#20854;&#20182;&#38656;&#35201;&#39564;&#35777;&#30340;&#20013;&#38388;&#20214;\n];<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>protected $routeMiddleware = [\n&#8216;auth&#8217; =&gt; AuthMiddlewareClass::class,\n&#8216;auth.basic&#8217; =&gt; Authenticator::class,\n&#8216;cache.headers&#8217; =&gt; CacheHeadersMiddleware::class,\n&#8216;can&#8217; =&gt; CanMiddleware::class,\n&#8216;signed&#8217; =&gt; SignedCookiesMiddleware::class,\n&#8216;throttle&#8217; =&gt; ThrottlesLogins::class,\n&#8216;admin&#8217; =&gt; AdminMiddleware::class,<\/p>\n<pre><code>'mail.mailer' =&gt; MailMailers::class,<\/code><\/pre>\n<p>];<\/p>\n<pre><code>\n5. &#21019;&#24314;&#19968;&#20010;&#27169;&#22411;&#25991;&#20214;&#26469;&#23384;&#20648;&#38468;&#20214;&#20449;&#24687;&#65288;&#20363;&#22914; `User` &#27169;&#22411;&#65289;&#65306;\n```php\n\/\/ models\/User.php\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateHttpUploadedFile;\n\nclass User extends Model\n{\n    protected $fillable = ['name', 'email'];\n\n    public function files()\n    {\n        return $this-&gt;hasMany(File::class);\n    }\n}<\/code><\/pre>\n<ol start=\"6\">\n<li>&#20351;&#29992; Laravel &#30340; Eloquent ORM &#23558;&#38468;&#20214;&#28155;&#21152;&#21040;&#29992;&#25143;&#27169;&#22411;&#20013;&#65306;\n<pre><code class=\"language-php\">\npublic function files()\n{\nreturn $this-&gt;hasMany('AppModelsFile');\n}<\/code><\/pre><\/li>\n<\/ol>\n<p>public function uploadFile($file)\n{\nif ($file instanceof UploadedFile) {\n$this-&gt;files()-&gt;create([\n&#8216;filename&#8217; =&gt; $file-&gt;getClientOriginalName(),\n&#8216;path&#8217; =&gt; $file-&gt;storeAs(&#8216;uploads&#8217;, $file-&gt;getFilename()),\n]);\n}\n}<\/p>\n<pre><code>\n7. &#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#37038;&#20214;&#21457;&#36865;&#35831;&#27714;&#65306;\n```php\n\/\/ controllers\/MailController.php\nnamespace AppHttpControllers;\n\nuse IlluminateSupportFacadesMail;\nuse IlluminateHttpRequest;\nuse AppUser;\n\nclass MailController extends Controller\n{\n    public function sendEmail(Request $request)\n    {\n        $data = $request-&gt;all();\n        $subject = $data['subject'];\n        $message = $data['message'];\n        $to = $data['to'];\n        $from = config('app.email.from');\n\n        Mail::send('emails.' . $data['template'], $data, function ($m) use ($subject, $message, $to, $from) {\n            $m-&gt;from($from)-&gt;to($to)-&gt;subject($subject)-&gt;view('emails.' . $data['template']);\n        });\n\n        return response()-&gt;json(['success' =&gt; true]);\n    }\n}<\/code><\/pre>\n<ol start=\"8\">\n<li>\n<p>&#20462;&#25913; <code>config\/app.php<\/code> &#25991;&#20214;&#20197;&#35774;&#32622;&#21457;&#20214;&#20154;&#30340;&#37038;&#31665;&#22320;&#22336;&#21644;&#23494;&#30721;&#12290;<\/p>\n<pre><code class=\"language-php\">return [\n...\n'mail' =&gt; [\n    'driver' =&gt; 'smtp',\n    'host' =&gt; env('MAIL_HOST', 'localhost'),\n    'encryption' =&gt; 'tls',\n    'username' =&gt; env('MAIL_USERNAME', ''),\n    'password' =&gt; env('MAIL_PASSWORD', ''),\n    'from' =&gt; [\n        'address' =&gt; env('MAIL_FROM_ADDRESS', 'no-reply@example.com'),\n        'name' =&gt; env('MAIL_FROM_NAME', 'No Reply'),\n    ],\n    'to' =&gt; [\n        'address' =&gt; $to,\n        'name' =&gt; $name,\n    ],\n],\n];<\/code><\/pre>\n<\/li>\n<li>\n<p>&#21019;&#24314;&#19968;&#20010;&#27169;&#26495;&#25991;&#20214;&#65288;&#20363;&#22914; <code>emails.html.twig<\/code>&#65289;&#65292;&#20854;&#20013;&#21253;&#21547;&#25152;&#38656;&#30340;&#20869;&#23481;&#21644;&#21464;&#37327;&#65306;<\/p>\n<pre><code class=\"language-twig\">&lt;!-- emails.html.twig --&gt;\n{% block content %}\n&lt;div&gt;\n    &lt;h1&gt;{{ subject }}&lt;\/h1&gt;\n    &lt;p&gt;{{ message }}&lt;\/p&gt;\n&lt;\/div&gt;\n{% endblock %}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#21629;&#20196;&#21457;&#36865;&#24102;&#26377;&#38468;&#20214;&#30340;&#37038;&#20214;&#65306;<\/p>\n<pre><code class=\"language-bash\">php artisan make:mailer EmailMailer --template=emails.html.twig<\/code><\/pre>\n<p>&#36825;&#23558;&#29983;&#25104;&#19968;&#20010;&#21517;&#20026; <code>EmailMailer<\/code> &#30340;&#26032;&#31867;&#65292;&#24182;&#33258;&#21160;&#29983;&#25104;&#30456;&#24212;&#30340;&#27169;&#26495;&#25991;&#20214;&#12290;<\/p>\n<p>&#25509;&#19979;&#26469;&#65292;&#20320;&#38656;&#35201;&#22312; Laravel &#25511;&#21046;&#22120;&#20013;&#27880;&#20876;&#36825;&#20010;&#26032;&#30340;&#37038;&#20214;&#21457;&#36865;&#22120;&#65292;&#24182;&#37197;&#32622;&#23427;&#25509;&#25910;&#26469;&#33258;&#25351;&#23450;&#25910;&#20214;&#20154;&#22320;&#22336;&#30340;&#37038;&#20214;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ controllers\/EmailController.php\nnamespace AppHttpControllers;\n\nuse IlluminateSupportFacadesMail;\nuse AppMailEmailMailer;\nuse IlluminateHttpRequest;\n\nclass EmailController extends Controller\n{\n    public function index(Request $request)\n    {\n        Mail::to($request-&gt;input('to'))-&gt;send(new EmailMailer($request));\n        return response()-&gt;json(['success' =&gt; true]);\n    }\n}<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#27599;&#24403;&#29992;&#25143;&#36890;&#36807;&#34920;&#21333;&#25552;&#20132;&#24102;&#26377;&#38468;&#20214;&#30340;&#37038;&#20214;&#26102;&#65292;Laravel &#24212;&#29992;&#23601;&#20250;&#33258;&#21160;&#21457;&#36865;&#19968;&#23553;&#24102;&#26377;&#38468;&#20214;&#30340;&#37038;&#20214;&#12290;&#21482;&#38656;&#20462;&#25913;&#27169;&#26495;&#20013;&#30340; <code>{{ to }}<\/code> &#21464;&#37327;&#21363;&#21487;&#21521;&#19981;&#21516;&#30340;&#25910;&#20214;&#20154;&#21457;&#36865;&#37038;&#20214;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22909;&#30340;&#65292;&#19979;&#38754;&#26159;&#22914;&#20309;&#20351;&#29992;Laravel&#26694;&#26550;&#21457;&#36865;&#24102;&#038;#263..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-858","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\/858","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=858"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=858"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=858"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}