{"id":1082,"date":"2025-06-12T12:24:33","date_gmt":"2025-06-12T04:24:33","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1082.html"},"modified":"2025-06-12T12:24:33","modified_gmt":"2025-06-12T04:24:33","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8-symfony-%e4%b8%ad%e5%ae%89%e6%8e%92%e4%bb%bb%e5%8a%a1","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1082.html","title":{"rendered":"\u5982\u4f55\u5728 Symfony \u4e2d\u5b89\u6392\u4efb\u52a1"},"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; Symfony &#20013;&#23433;&#25490;&#20219;&#21153;&#21487;&#20197;&#36890;&#36807;&#22810;&#31181;&#26041;&#24335;&#23454;&#29616;&#65292;&#21253;&#25324;&#20351;&#29992;&#20869;&#32622;&#30340;&#20219;&#21153;&#38431;&#21015;&#31995;&#32479;&#12289;&#31532;&#19977;&#26041;&#24211;&#65288;&#22914; Beanstalkd &#25110; RabbitMQ&#65289;&#25110;&#32773;&#33258;&#23450;&#20041;&#20219;&#21153;&#22788;&#29702;&#36923;&#36753;&#12290;&#19979;&#38754;&#25105;&#23558;&#35814;&#32454;&#20171;&#32461;&#19968;&#19979;&#20960;&#31181;&#24120;&#35265;&#30340;&#26041;&#27861;&#12290;<\/p>\n<h3>1. &#20351;&#29992;&#20869;&#32622;&#30340;&#20219;&#21153;&#38431;&#21015;&#31995;&#32479;<\/h3>\n<p>Symfony &#25552;&#20379;&#20102;&#19968;&#20010;&#20869;&#32622;&#30340;&#20219;&#21153;&#38431;&#21015;&#31995;&#32479;&#65292;&#31216;&#20026; <code>Doctrine AMQP<\/code>&#12290;&#36825;&#20010;&#31995;&#32479;&#21487;&#20197;&#29992;&#26469;&#24322;&#27493;&#25191;&#34892;&#20219;&#21153;&#12290;<\/p>\n<h4>&#23433;&#35013; Doctrine AMQP<\/h4>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013; Doctrine AMQP &#21253;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/messenger-amqp-bundle<\/code><\/pre>\n<h4>&#37197;&#32622; AMQP<\/h4>\n<p>&#32534;&#36753; <code>config\/packages\/amqp.yaml<\/code> &#25991;&#20214;&#65292;&#37197;&#32622; AMQP &#36830;&#25509;&#20449;&#24687;&#65306;<\/p>\n<pre><code class=\"language-yaml\">framework:\n    messenger:\n        transport:\n            amqp:\n                dsn: 'amqp:\/\/guest:guest@localhost:5672'<\/code><\/pre>\n<h4>&#21019;&#24314;&#20219;&#21153;&#31867;<\/h4>\n<p>&#21019;&#24314;&#19968;&#20010;&#20219;&#21153;&#31867;&#65292;&#32487;&#25215;&#33258; <code>SymfonyComponentMessengerTransportMessageBusAwareInterface<\/code>&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppMessage;\n\nuse SymfonyComponentMessengerTransportMessageBusAwareInterface;\nuse SymfonyComponentMessengerTransportEnvelope;\nuse SymfonyComponentMessengerHandlerMessageHandlerInterface;\n\nclass SendEmail implements MessageHandlerInterface, MessageBusAwareInterface\n{\n    private $messageBus;\n\n    public function __construct($messageBus)\n    {\n        $this-&gt;messageBus = $messageBus;\n    }\n\n    public function handle(SendEmailMessage $message): void\n    {\n        \/\/ &#25191;&#34892;&#37038;&#20214;&#21457;&#36865;&#25805;&#20316;\n        echo \"Sending email to {$message-&gt;getEmail()}n\";\n    }\n}<\/code><\/pre>\n<h4>&#21457;&#36865;&#28040;&#24687;<\/h4>\n<p>&#21019;&#24314;&#19968;&#20010;&#28040;&#24687;&#23545;&#35937;&#24182;&#23558;&#20854;&#21457;&#36865;&#21040;&#20219;&#21153;&#38431;&#21015;&#65306;<\/p>\n<pre><code class=\"language-php\">use AppMessageSendEmail;\nuse AppMessageBusMessageBus;\n\n$container = require_once __DIR__ . '\/..\/bootstrap.php';\n$messageBus = $container-&gt;get(MessageBus::class);\n\n$emailMessage = new SendEmail('example@example.com');\n$messageBus-&gt;dispatch($emailMessage);<\/code><\/pre>\n<h3>2. &#20351;&#29992;&#31532;&#19977;&#26041;&#24211;<\/h3>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#26356;&#39640;&#32423;&#30340;&#21151;&#33021;&#65292;&#21487;&#20197;&#32771;&#34385;&#20351;&#29992;&#31532;&#19977;&#26041;&#24211;&#65292;&#22914; Beanstalkd &#25110; RabbitMQ&#12290;<\/p>\n<h4>&#23433;&#35013; Beanstalkd<\/h4>\n<p>&#23433;&#35013; Beanstalkd&#65306;<\/p>\n<pre><code class=\"language-bash\">docker run --rm -d --name beanstalkd -p 11300:11300 rabbitmq:management<\/code><\/pre>\n<h4>&#37197;&#32622; Beanstalkd<\/h4>\n<p>&#32534;&#36753; <code>config\/packages\/messenger.yaml<\/code> &#25991;&#20214;&#65292;&#37197;&#32622; Beanstalkd &#36830;&#25509;&#20449;&#24687;&#65306;<\/p>\n<pre><code class=\"language-yaml\">framework:\n    messenger:\n        transport:\n            beanstalkd:\n                host: localhost\n                port: 11300<\/code><\/pre>\n<h4>&#21019;&#24314;&#20219;&#21153;&#31867;<\/h4>\n<p>&#21019;&#24314;&#19968;&#20010;&#20219;&#21153;&#31867;&#65292;&#24182;&#23558;&#20854;&#27880;&#20876;&#20026;&#28040;&#24687;&#22788;&#29702;&#22120;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppMessage;\n\nuse SymfonyComponentMessengerTransportMessageBusAwareInterface;\nuse SymfonyComponentMessengerTransportEnvelope;\nuse SymfonyComponentMessengerHandlerMessageHandlerInterface;\n\nclass SendEmail implements MessageHandlerInterface, MessageBusAwareInterface\n{\n    private $messageBus;\n\n    public function __construct($messageBus)\n    {\n        $this-&gt;messageBus = $messageBus;\n    }\n\n    public function handle(SendEmailMessage $message): void\n    {\n        \/\/ &#25191;&#34892;&#37038;&#20214;&#21457;&#36865;&#25805;&#20316;\n        echo \"Sending email to {$message-&gt;getEmail()}n\";\n    }\n}<\/code><\/pre>\n<h4>&#21457;&#36865;&#28040;&#24687;<\/h4>\n<p>&#21019;&#24314;&#19968;&#20010;&#28040;&#24687;&#23545;&#35937;&#24182;&#23558;&#20854;&#21457;&#36865;&#21040;&#20219;&#21153;&#38431;&#21015;&#65306;<\/p>\n<pre><code class=\"language-php\">use AppMessageSendEmail;\nuse AppMessageBusMessageBus;\n\n$container = require_once __DIR__ . '\/..\/bootstrap.php';\n$messageBus = $container-&gt;get(MessageBus::class);\n\n$emailMessage = new SendEmail('example@example.com');\n$messageBus-&gt;dispatch($emailMessage);<\/code><\/pre>\n<h3>3. &#33258;&#23450;&#20041;&#20219;&#21153;&#22788;&#29702;&#36923;&#36753;<\/h3>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#20219;&#21153;&#22788;&#29702;&#36923;&#36753;&#65292;&#21487;&#20197;&#32534;&#20889;&#33258;&#23450;&#20041;&#30340;&#20219;&#21153;&#22788;&#29702;&#31867;&#12290;<\/p>\n<h4>&#21019;&#24314;&#20219;&#21153;&#31867;<\/h4>\n<p>&#21019;&#24314;&#19968;&#20010;&#20219;&#21153;&#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppMessage;\n\nuse SymfonyComponentMessengerTransportMessageBusAwareInterface;\nuse SymfonyComponentMessengerTransportEnvelope;\nuse SymfonyComponentMessengerHandlerMessageHandlerInterface;\n\nclass CustomTask implements MessageHandlerInterface, MessageBusAwareInterface\n{\n    private $messageBus;\n\n    public function __construct($messageBus)\n    {\n        $this-&gt;messageBus = $messageBus;\n    }\n\n    public function handle(CustomTaskMessage $message): void\n    {\n        \/\/ &#25191;&#34892;&#33258;&#23450;&#20041;&#20219;&#21153;&#36923;&#36753;\n        echo \"Processing custom taskn\";\n    }\n}<\/code><\/pre>\n<h4>&#21457;&#36865;&#28040;&#24687;<\/h4>\n<p>&#21019;&#24314;&#19968;&#20010;&#28040;&#24687;&#23545;&#35937;&#24182;&#23558;&#20854;&#21457;&#36865;&#21040;&#20219;&#21153;&#38431;&#21015;&#65306;<\/p>\n<pre><code class=\"language-php\">use AppMessageCustomTask;\nuse AppMessageBusMessageBus;\n\n$container = require_once __DIR__ . '\/..\/bootstrap.php';\n$messageBus = $container-&gt;get(MessageBus::class);\n\n$customTaskMessage = new CustomTask();\n$messageBus-&gt;dispatch($customTaskMessage);<\/code><\/pre>\n<p>&#36890;&#36807;&#20197;&#19978;&#19977;&#31181;&#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#22312; Symfony &#20013;&#26377;&#25928;&#22320;&#23433;&#25490;&#21644;&#31649;&#29702;&#20219;&#21153;&#12290;&#36873;&#25321;&#21738;&#31181;&#26041;&#27861;&#21462;&#20915;&#20110;&#20320;&#30340;&#20855;&#20307;&#38656;&#27714;&#21644;&#39033;&#30446;&#26550;&#26500;&#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><h3>&#20171;&#32461;<\/h3><p>&#20219;&#21153;&#35843;&#24230;&#26159;&#29616;&#20195;Web&#24212;&#29992;&#20013;&#30340;&#20851;&#38190;&#32452;&#20214;&#12290;&#23427;&#20801;&#35768;&#33258;&#21160;&#21270;&#37325;&#22797;&#30340;&#20219;&#21153;&#65292;&#22914;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#12289;&#29983;&#25104;&#25253;&#21578;&#21644;&#28165;&#29702;&#25968;&#25454;&#24211;&#31561;&#12290;Symfony&#26694;&#26550;&#22240;&#20854;&#39640;&#24230;&#21487;&#25193;&#23637;&#24615;&#21644;&#24378;&#22823;&#21151;&#33021;&#32780;&#25552;&#20379;&#20102;&#22810;&#31181;&#39640;&#25928;&#25191;&#34892;&#20219;&#21153;&#30340;&#26041;&#27861;&#12290;&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#22312;Symfony&#20013;&#23454;&#29616;&#20219;&#21153;&#35843;&#24230;&#12290;<\/p><h3>&#29702;&#35299;Symfony&#30340;Console&#32452;&#20214;<\/h3><p>&#22312;&#28145;&#20837;&#21040;&#20219;&#21153;&#35843;&#24230;&#20043;&#21069;&#65292;&#29702;&#35299;Symfony&#30340;Console&#32452;&#20214;&#33267;&#20851;&#37325;&#35201;&#12290;&#36825;&#20010;&#24378;&#22823;&#30340;&#24037;&#20855;&#38598;&#20801;&#35768;&#24320;&#21457;&#20154;&#21592;&#21019;&#24314;&#21629;&#20196;&#34892;&#25351;&#20196;&#65292;&#36825;&#20123;&#25351;&#20196;&#21487;&#20197;&#34987;&#23433;&#25490;&#25191;&#34892;&#12290;&#35201;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#21629;&#20196;&#65292;&#35831;&#20351;&#29992;Symfony console&#65306;<\/p><pre><code>php bin\/console make:command App:YourTask<\/code><\/pre><p>&#36825;&#23558;&#29983;&#25104;&#19968;&#20010;&#26032;&#30340;&#21629;&#20196;&#31867;&#22312;<code>src\/Command<\/code>&#25320;&#21495;&#30424;&#12290;<\/p><h3>&#21019;&#24314;&#19968;&#20010;&#21629;&#20196;<\/h3><p>&#22312;&#29983;&#25104;&#30340;&#21629;&#20196;&#31867;&#20869;&#37096;&#65292;&#20320;&#21487;&#20197;&#23450;&#20041;&#35813;&#21629;&#20196;&#23558;&#20250;&#20570;&#20160;&#20040;&#65306;<\/p><pre><code>namespace AppCommand;\n\nuse SymfonyComponentConsoleCommandCommand;\nuse SymfonyComponentConsoleInputInputInterface;\nuse SymfonyComponentConsoleOutputOutputInterface;\n\nclass YourTaskCommand extends Command\n{\n    protected static $defaultName = 'app:your-task';\n\n    protected function execute(InputInterface $input, OutputInterface $output)\n    {\n        \/\/ Your task logic here\n\n        return Command::SUCCESS;\n    }\n}\n<\/code><\/pre><h3>&#19982;cron&#20316;&#19994;&#35843;&#24230;<\/h3><p>&#22522;&#20110;Unix&#30340;cron&#35843;&#24230;&#22120;&#26159;&#26368;&#24120;&#35265;&#30340;&#20219;&#21153;&#35843;&#24230;&#26041;&#24335;&#12290;<\/p><p>&#39318;&#20808;&#65292;&#25171;&#24320; crontab &#37197;&#32622;&#25991;&#20214;&#65306;<\/p><pre><code>crontab -e<\/code><\/pre><p>&#28155;&#21152;&#19968;&#26465;&#26032;&#26465;&#30446;&#65292;&#25351;&#23450;&#39057;&#29575;&#21644;&#36816;&#34892;&#30340;Symfony&#21629;&#20196;&#65306;<\/p><pre><code>* * * * * \/usr\/bin\/php \/path-to-your-project\/bin\/console app:your-task<\/code><\/pre><h3>&#20351;&#29992;Symfony CronBundle<\/h3><p>&#23545;&#20110;Symfony&#20013;&#30340;&#26356;&#39640;&#32423;&#30340;&#35843;&#24230;&#21151;&#33021;&#65292;&#21487;&#20197;&#32771;&#34385;&#20351;&#29992;&#19987;&#38376;&#30340;&#21253;&#22914;Cron Symfony Bundle&#12290;&#36890;&#36807;Composer&#23433;&#35013;&#23427;&#65306;<\/p><pre><code>composer require cron\/cron-bundle<\/code><\/pre><p>&#23433;&#35013;&#21518;&#65292;&#24744;&#21487;&#20197;&#22312;&#24744;&#30340;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#30452;&#25509;&#23450;&#20041;&#20219;&#21153;&#65306;<\/p><pre><code>$cronJob = new CronJobCronJob();\n$cronJob-&gt;setCommand('app:your-task');\n$cronJob-&gt;setSchedule('* * * * *'); \/\/ Crontab schedule format\n$this-&gt;get('cron.scheduler')-&gt;addJob($cronJob);\n<\/code><\/pre><h3>&#21033;&#29992;Symfony&#30340;&#35843;&#24230;&#22120;<\/h3><p>&#33258;Symfony 5.1&#29256;&#20197;&#26469;&#65292;&#24341;&#20837;&#20102;&#19968;&#20010;&ldquo;&#35843;&#24230;&#22120;&rdquo;&#32452;&#20214;&#65292;&#36825;&#24847;&#21619;&#30528;Symfony&#25552;&#20379;&#20102;&#19968;&#31181;&#20869;&#37096;&#26041;&#24335;&#26469;&#31649;&#29702;&#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#37325;&#22797;&#20219;&#21153;&#65306;<\/p><p>&#39318;&#20808;&#65292;&#37197;&#32622;&#24744;&#30340;&#35843;&#24230;&#22120;&#20219;&#21153;&#65306;<\/p><pre><code># config\/packages\/scheduler.yaml\nscheduler:\n    tasks:\n        your_task:\n            type: 'command'\n            command: 'app:your-task'\n            expression: '* * * * *'\n<\/code><\/pre><p>&#26368;&#21518;&#65292;&#28608;&#27963;&#35843;&#24230;&#22120;&#24037;&#20316;&#32447;&#31243;&#65306;<\/p><pre><code>php bin\/console scheduler:consume<\/code><\/pre><h3>&#32467;&#35770;&#12290;<\/h3><p>Symfony&#30340;&#20219;&#21153;&#35843;&#24230;&#21487;&#20197;&#22312;&#20869;&#32622;&#30340;cron&#31995;&#32479;&#12289;&#31532;&#19977;&#26041;&#25193;&#23637;&#25110;&#24341;&#20837;&#30340;Symfony&#35843;&#24230;&#22120;&#20013;&#20351;&#29992;&#12290;&#36825;&#19977;&#31181;&#26041;&#27861;&#37117;&#20801;&#35768;Symfony&#24320;&#21457;&#20154;&#21592;&#39640;&#25928;&#22320;&#31649;&#29702;&#26102;&#38388;&#39537;&#21160;&#30340;&#20219;&#21153;&#65292;&#25552;&#20379;&#28789;&#27963;&#24615;&#21644;&#25511;&#21046;&#65292;&#20197;&#32500;&#25252;&#19968;&#20010;&#24378;&#22823;&#30340;&#21644;&#33258;&#21160;&#21270;&#30340;&#24212;&#29992;&#31243;&#24207;&#29615;&#22659;&#12290;<\/p><h3>&#26368;&#20339;&#23454;&#36341;<\/h3><p>&#20540;&#24471;&#27880;&#24847;&#30340;&#26159;&#65292;&#22312;&#23433;&#25490;&#20219;&#21153;&#26102;&#24212;&#36981;&#24490;&#30340;&#19968;&#20123;&#26368;&#20339;&#23454;&#36341;&#65306;<\/p><p>&#36164;&#28304;&#21033;&#29992;&#29575;&#65306;&#32771;&#34385;&#23545;&#26381;&#21153;&#22120;&#36164;&#28304;&#30340;&#24433;&#21709;&#65292;&#24517;&#35201;&#26102;&#22312;&#38750;&#39640;&#23792;&#26102;&#27573;&#23433;&#25490;&#20219;&#21153;&#12290;<\/p><p>&#38169;&#35823;&#22788;&#29702;&#65306;&#23454;&#26045;&#20840;&#38754;&#30340;&#38169;&#35823;&#22788;&#29702;&#65292;&#20197;&#38450;&#27490;&#24847;&#22806;&#22833;&#36133;&#34987;&#24573;&#35270;&#12290;<\/p><p>&#35760;&#24405;&#65306;&#22312;&#30417;&#27979;&#30446;&#30340;&#19978;&#65292;&#35831;&#22987;&#32456;&#35760;&#24405;&#24744;&#30340;&#39044;&#23450;&#20219;&#21153;&#30340;&#32467;&#26524;&#12290;<\/p><p>&#25353;&#29031;&#27492;&#25351;&#21335;&#24182;&#36981;&#24490;&#26368;&#20339;&#23454;&#36341;&#65292;&#24744;&#21487;&#20197;&#22312;Symfony&#20013;&#26377;&#25928;&#22320;&#23433;&#25490;&#20219;&#21153;&#65292;&#24182;&#30830;&#20445;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#36816;&#34892;&#39034;&#30021;&#19988;&#21487;&#38752;&#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; Symfony &#20013;&#23433;&#25490;&#20219;&#21153;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992; <code>Scheduler<\/code> &#26381;&#21153;&#26469;&#23454;&#29616;&#12290;<code>Scheduler<\/code> &#26159; Symfony &#30340;&#20869;&#32622;&#21151;&#33021;&#65292;&#23427;&#20801;&#35768;&#20320;&#22312;&#24212;&#29992;&#21551;&#21160;&#26102;&#25191;&#34892;&#39044;&#23450;&#20041;&#30340;&#20219;&#21153;&#12290;<\/p>\n<p>&#20197;&#19979;&#26159;&#22914;&#20309;&#22312; Symfony &#20013;&#23433;&#25490;&#20219;&#21153;&#30340;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013; Scheduler &#24182;&#21551;&#29992;&#23427;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; Composer &#23433;&#35013;&#23427;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/symfony-scheduler<\/code><\/pre>\n<\/li>\n<li>\n<p>&#28982;&#21518;&#65292;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340; <code>Task<\/code> &#31867;&#65292;&#24182;&#32487;&#25215;&#33258; <code>AbstractTask<\/code> &#31867;&#12290;&#36825;&#20010;&#31867;&#23558;&#36127;&#36131;&#25191;&#34892;&#20320;&#30340;&#20219;&#21153;&#12290;<\/p>\n<pre><code class=\"language-php\">\n&lt;?php<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>namespace AppTasks;<\/p>\n<p>use SymfonyBundleFrameworkBundleConsoleApplication;\nuse SymfonyComponentConsoleCommandCommand;\nuse SymfonyComponentConsoleInputInputInterface;\nuse SymfonyComponentConsoleOutputOutputInterface;<\/p>\n<p>class HelloWorld extends Command\n{\nprotected static $defaultName = &#8216;hello-world&#8217;;<\/p>\n<pre><code>public function execute(InputInterface $input, OutputInterface $output)\n{\n    \/\/ &#22312;&#36825;&#37324;&#32534;&#20889;&#20320;&#30340;&#20219;&#21153;&#36923;&#36753;\n    $output-&gt;writeln('Hello World!');\n}<\/code><\/pre>\n<p>}<\/p>\n<pre><code>\n3. &#25509;&#19979;&#26469;&#65292;&#20320;&#38656;&#35201;&#37197;&#32622;&#20320;&#30340;&#24212;&#29992;&#20197;&#20351;&#29992;&#26032;&#30340; `Task`&#12290;&#36825;&#21487;&#20197;&#36890;&#36807;&#28155;&#21152;&#19968;&#20010;&#26032;&#30340;&#21629;&#20196;&#21040; `Kernel::boot()` &#26041;&#27861;&#20013;&#30340; `run()` &#20989;&#25968;&#26469;&#23436;&#25104;&#12290;\n```php\nprotected function configure()\n{\n    $this\n        -&gt;setName('task:execute')\n        -&gt;setDescription('Execute a task')\n        -&gt;setHelp($this-&gt;getHelperSet()-&gt;getHelpMessage());\n}\n\npublic function run(Application $application)\n{\n    $command = new HelloWorld();\n    $application-&gt;add($command);\n    return parent::run($application);\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>&#26368;&#21518;&#65292;&#20320;&#38656;&#35201;&#22312;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#30340;&#20837;&#21475;&#28857;&#65288;&#36890;&#24120;&#26159; <code>app\/console<\/code>&#65289;&#20013;&#36816;&#34892;&#36825;&#20010;&#26032;&#21629;&#20196;&#12290;\n<pre><code class=\"language-bash\">$ php bin\/console task:execute<\/code><\/pre><\/li>\n<\/ol>\n<p>&#29616;&#22312;&#65292;&#27599;&#24403;&#29992;&#25143;&#36816;&#34892;&#36825;&#20010;&#21629;&#20196;&#26102;&#65292;&#37117;&#20250;&#25191;&#34892;&#25105;&#20204;&#20043;&#21069;&#32534;&#20889;&#30340;&#20219;&#21153;&#65292;&#21363;&#36755;&#20986; &#8220;Hello World!&#8221;&#12290;<\/p>\n<p>&#35831;&#27880;&#24847;&#65292;&#19978;&#36848;&#27493;&#39588;&#26159;&#22522;&#26412;&#30340;&#65292;&#23454;&#38469;&#30340;&#24212;&#29992;&#31243;&#24207;&#21487;&#33021;&#20250;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#35774;&#32622;&#21644;&#31649;&#29702;&#12290;&#20363;&#22914;&#65292;&#20320;&#21487;&#33021;&#38656;&#35201;&#22788;&#29702;&#19981;&#21516;&#30340;&#29615;&#22659;&#21464;&#37327;&#12289;&#38169;&#35823;&#22788;&#29702;&#25110;&#32773;&#26085;&#24535;&#35760;&#24405;&#31561;&#12290;&#22914;&#26524;&#20320;&#38656;&#35201;&#36827;&#19968;&#27493;&#30340;&#24110;&#21161;&#65292;&#35831;&#21578;&#35785;&#25105;&#26356;&#22810;&#20851;&#20110;&#20320;&#30340;&#20855;&#20307;&#38656;&#27714;&#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; Symfony &#20013;&#23433;&#25490;&#20219;&#21153;&#21487;&#20197;&#36890;&#36807;&#22810;&#31181;&#26041;&#24335;&#23454;&#038;#2..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1082","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"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\/1082","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=1082"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1082"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1082"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}