{"id":1092,"date":"2025-06-12T12:43:07","date_gmt":"2025-06-12T04:43:07","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1092.html"},"modified":"2025-06-12T12:43:07","modified_gmt":"2025-06-12T04:43:07","slug":"symfony%ef%bc%9a%e5%a6%82%e4%bd%95%e5%b0%86%e4%be%9d%e8%b5%96%e6%b3%a8%e5%85%a5%e5%88%b0%e6%9c%8d%e5%8a%a1%e4%b8%ad","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1092.html","title":{"rendered":"Symfony\uff1a\u5982\u4f55\u5c06\u4f9d\u8d56\u6ce8\u5165\u5230\u670d\u52a1\u4e2d"},"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;&#65292;&#20381;&#36182;&#27880;&#20837;&#65288;Dependency Injection, DI&#65289;&#26159;&#19968;&#31181;&#35774;&#35745;&#27169;&#24335;&#65292;&#29992;&#20110;&#23558;&#31867;&#20043;&#38388;&#30340;&#20851;&#31995;&#21644;&#25511;&#21046;&#26435;&#20998;&#31163;&#12290;&#36890;&#36807;&#20351;&#29992; DI&#65292;&#20320;&#21487;&#20197;&#26356;&#28789;&#27963;&#22320;&#37197;&#32622;&#21644;&#31649;&#29702;&#24212;&#29992;&#31243;&#24207;&#30340;&#32452;&#20214;&#12290;&#19979;&#38754;&#26159;&#22914;&#20309;&#22312; Symfony &#39033;&#30446;&#20013;&#23558;&#20381;&#36182;&#27880;&#20837;&#21040;&#26381;&#21153;&#20013;&#30340;&#27493;&#39588;&#12290;<\/p>\n<h3>1. &#23450;&#20041;&#26381;&#21153;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23450;&#20041;&#19968;&#20010;&#26381;&#21153;&#65292;&#24182;&#23558;&#20854;&#27880;&#20876;&#20026;&#23481;&#22120;&#30340;&#19968;&#37096;&#20998;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; <code>services.yaml<\/code> &#25991;&#20214;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p>\n<pre><code class=\"language-yaml\"># config\/services.yaml\nservices:\n    AppServiceMyService:\n        arguments: ['@logger']<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code>MyService<\/code> &#31867;&#38656;&#35201;&#25509;&#21463;&#19968;&#20010;&#21442;&#25968; <code>logger<\/code>&#65292;&#36825;&#20010;&#21442;&#25968;&#26159;&#30001; <code>logger<\/code> &#26381;&#21153;&#25552;&#20379;&#30340;&#12290;<\/p>\n<h3>2. &#27880;&#20876;&#26381;&#21153;<\/h3>\n<p>&#22312; <code>AppKernel.php<\/code> &#25110; <code>bootstrap.php<\/code> &#25991;&#20214;&#20013;&#27880;&#20876;&#26381;&#21153;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/App\/AppKernel.php\nuse SymfonyComponentDependencyInjectionContainerBuilder;\nuse SymfonyComponentHttpKernelBundleBundle;\n\nclass AppBundle extends Bundle\n{\n    public function registerContainerConfiguration(LoaderInterface $loader)\n    {\n        $loader-&gt;load(__DIR__.'\/config\/config.yml');\n    }\n}<\/code><\/pre>\n<p>&#25110;&#32773;&#22312; <code>bootstrap.php<\/code>&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ app\/bootstrap.php\n$container = new ContainerBuilder();\n$container-&gt;register('app.service.myservice', 'AppServiceMyService')\n    -&gt;addArgument(new Reference('logger'));\n$container-&gt;compile();<\/code><\/pre>\n<h3>3. &#20351;&#29992;&#26381;&#21153;<\/h3>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#20174;&#23481;&#22120;&#20013;&#33719;&#21462;&#24182;&#20351;&#29992; <code>MyService<\/code>&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/HomeController.php\nnamespace AppController;\n\nuse AppServiceMyService;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass HomeController extends AbstractController\n{\n    private $myService;\n\n    public function __construct(MyService $myService)\n    {\n        $this-&gt;myService = $myService;\n    }\n\n    public function index(): Response\n    {\n        return $this-&gt;render('home\/index.html.twig', [\n            'message' =&gt; $this-&gt;myService-&gt;getMessage(),\n        ]);\n    }\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#23450;&#20041;&#12289;&#27880;&#20876;&#21644;&#26381;&#21153;&#65292;&#24182;&#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;&#23427;&#12290;<\/p>\n<h4>1. <code>services.yaml<\/code><\/h4>\n<pre><code class=\"language-yaml\"># config\/services.yaml\nservices:\n    AppServiceMyService:\n        arguments: ['@logger']\n\n    AppControllerHomeController:\n        arguments: [ '@app.service.myservice' ]<\/code><\/pre>\n<h4>2. <code>AppKernel.php<\/code><\/h4>\n<pre><code class=\"language-php\">\/\/ src\/App\/AppKernel.php\nuse SymfonyComponentDependencyInjectionContainerBuilder;\nuse SymfonyComponentHttpKernelBundleBundle;\n\nclass AppBundle extends Bundle\n{\n    public function registerContainerConfiguration(LoaderInterface $loader)\n    {\n        $loader-&gt;load(__DIR__.'\/config\/config.yml');\n    }\n}<\/code><\/pre>\n<h4>3. <code>HomeController.php<\/code><\/h4>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/HomeController.php\nnamespace AppController;\n\nuse AppServiceMyService;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass HomeController extends AbstractController\n{\n    private $myService;\n\n    public function __construct(MyService $myService)\n    {\n        $this-&gt;myService = $myService;\n    }\n\n    public function index(): Response\n    {\n        return $this-&gt;render('home\/index.html.twig', [\n            'message' =&gt; $this-&gt;myService-&gt;getMessage(),\n        ]);\n    }\n}<\/code><\/pre>\n<h4>4. <code>index.html.twig<\/code><\/h4>\n<pre><code class=\"language-twig\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;Home Page&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;{{ message }}&lt;\/h1&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#20123;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312; Symfony &#39033;&#30446;&#20013;&#25104;&#21151;&#22320;&#23558;&#20381;&#36182;&#27880;&#20837;&#21040;&#26381;&#21153;&#20013;&#65292;&#24182;&#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;&#23427;&#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>&#20381;&#36182;&#27880;&#20837;&#65288;DI&#65289;&#26159;&#19968;&#31181;&#35774;&#35745;&#27169;&#24335;&#65292;&#20801;&#35768;&#19968;&#20010;&#31867;&#20174;&#22806;&#37096;&#26469;&#28304;&#25509;&#25910;&#20854;&#20381;&#36182;&#39033;&#65292;&#32780;&#19981;&#26159;&#20869;&#37096;&#21019;&#24314;&#23427;&#20204;&#12290;&#22312;Symfony&#20013;&#65292;&#26381;&#21153;&#20381;&#36182;&#27880;&#20837;&#23545;&#20110;&#32500;&#25252;&#24178;&#20928;&#30340;&#20195;&#30721;&#21644;&#20851;&#27880;&#28857;&#20998;&#31163;&#33267;&#20851;&#37325;&#35201;&#12290;&#26412;&#25945;&#31243;&#23558;&#24341;&#23548;&#24744;&#36890;&#36807;&#36807;&#31243;&#65292;&#22312;Symfony&#20013;&#20026;&#26381;&#21153;&#27880;&#20837;&#20381;&#36182;&#65292;&#20174;&#26368;&#22522;&#30784;&#30340;&#20363;&#23376;&#21040;&#26356;&#39640;&#32423;&#30340;&#24212;&#29992;&#22330;&#26223;&#12290;&#38468;&#24102;&#20195;&#30721;&#31034;&#20363;&#65292;&#24744;&#23558;&#20102;&#35299;&#22914;&#20309;&#26377;&#25928;&#22320;&#21033;&#29992;Symfony&#30340;&#26381;&#21153;&#23481;&#22120;&#26469;&#31649;&#29702;&#20381;&#36182;&#20851;&#31995;&#12290;<\/p><h2>&#29702;&#35299;&#22522;&#26412;&#27010;&#24565;<\/h2><p>&#39318;&#20808;&#65292;&#35753;&#25105;&#20204;&#28548;&#28165;&#19968;&#19979;Symfony&#20013;&#30340;&#26381;&#21153;&#26159;&#20160;&#20040;&#26679;&#30340;&#12290;&#19968;&#20010;&#26381;&#21153;&#26159;&#19968;&#20010;&#25191;&#34892;&#29305;&#23450;&#20219;&#21153;&#30340;PHP&#23545;&#35937;&#65292;&#20363;&#22914;&#21457;&#36865;&#30005;&#23376;&#37038;&#20214;&#12289;&#22788;&#29702;&#25968;&#25454;&#24211;&#36830;&#25509;&#25110;&#22788;&#29702;&#25903;&#20184;&#31561;&#12290;&#26381;&#21153;&#31471;&#28857;&#26550;&#26500;&#30340;&#26680;&#24515;&#23601;&#26159;&#26381;&#21153;&#65292;&#36890;&#24120;&#23427;&#20204;&#26159;&#22312;&#26381;&#21153;&#23481;&#22120;&#20869;&#37197;&#32622;&#21644;&#31649;&#29702;&#30340;&#12290;<\/p><p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23450;&#20041;&#20320;&#30340;&#26381;&#21153;&#12290;&#36825;&#37324;&#26377;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#26381;&#21153;&#26469;&#35760;&#24405;&#28040;&#24687;&#65306;<\/p><pre><code>namespace AppService;\n\nclass LoggerService {\n  public function log(string $message) {\n    \/\/ Log the message to some storage\n  }\n}\n<\/code><\/pre><p>&#22312;&#35768;&#22810;&#24773;&#20917;&#19979;&#65292;&#20687;&#36825;&#26679;&#30340;&#26381;&#21153;&#26159;&#23384;&#22312;&#30340;&#12290;<code>LoggerService<\/code>&#38656;&#35201;&#22806;&#37096;&#36164;&#28304;&#65292;&#27604;&#22914;&#26085;&#24535;&#24211;&#25110;&#37197;&#32622;&#25991;&#20214;&#12290;&#36825;&#23601;&#26159;&#20381;&#36182;&#27880;&#20837;&#21457;&#25381;&#20316;&#29992;&#30340;&#22320;&#26041;&#12290;<\/p><h2>&#26500;&#36896;&#22120;&#27880;&#20837;<\/h2><p>&#26368;&#24120;&#35265;&#30340;&#23558;&#20381;&#36182;&#27880;&#20837;&#21040;&#26381;&#21153;&#30340;&#26041;&#27861;&#26159;&#36890;&#36807;&#26500;&#36896;&#20989;&#25968;&#12290;&#20351;&#29992;&#26500;&#36896;&#20989;&#25968;&#27880;&#20837;&#21487;&#20197;&#26126;&#30830;&#26174;&#31034;&#22320;&#22768;&#26126;&#20381;&#36182;&#39033;&#65292;&#24182;&#30830;&#20445;&#22312;&#20351;&#29992;&#20043;&#21069;&#65292;&#26381;&#21153;&#24050;&#32463;&#25317;&#26377;&#25152;&#26377;&#38656;&#35201;&#30340;&#36164;&#28304;&#12290;<\/p><p>&#20551;&#35774;&#25105;&#20204;&#24819;&#35201;&#22312;&#25105;&#20204;&#30340;&#20195;&#30721;&#20013;&#27880;&#20837;&#19968;&#20010;&#26085;&#24535;&#25509;&#21475;&#12290;<code>LoggerService<\/code>&#25105;&#20204;&#23558;&#36890;&#36807;&#23450;&#20041;&#26085;&#24535;&#35760;&#24405;&#20381;&#36182;&#39033;&#30340;&#25509;&#21475;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#65306;<\/p><pre><code>namespace AppLogger;\n\ninterface LoggerInterface {\n  public function log(string $message): void;\n}\n<\/code><\/pre><p>&#28982;&#21518;&#65292;&#20462;&#25913;&#20102;&#23427;&#12290;<code>LoggerService<\/code>&#25509;&#21463;&#19968;&#20010;<code>LoggerInterface<\/code>&#36890;&#36807;&#20854;&#26500;&#36896;&#20989;&#25968;&#65306;<\/p><pre><code>\/\/ src\/Service\/LoggerService.php\nnamespace AppService;\n\nuse AppLoggerLoggerInterface;\n\nclass LoggerService {\n  private $logger;\n\n  public function __construct(LoggerInterface $logger) {\n    $this-&gt;logger = $logger;\n  }\n\n  public function log(string $message) {\n    $this-&gt;logger-&gt;log($message);\n  }\n}\n<\/code><\/pre><p>&#25509;&#19979;&#26469;&#65292;&#24744;&#23558;&#22312;&#37197;&#32622;&#25991;&#20214;&#20013;&#23450;&#20041;&#27492;&#26381;&#21153;&#21450;&#20854;&#20381;&#36182;&#39033;&#65292;&#36825;&#26679;Symfony&#23601;&#33021;&#23454;&#20363;&#21270;&#23427;&#20102;&#65306;<\/p><pre><code># config\/services.yaml\nservices:\n  AppLoggerLoggerInterface: '@monolog.logger'\n  AppServiceLoggerService:\n    arguments: ['@AppLoggerLoggerInterface']\n<\/code><\/pre><p>&#20351;&#29992;&#36825;&#31181;&#26041;&#27861;&#65292;&#24403;&#26381;&#21153;&#23481;&#22120;&#21019;&#24314;&#23454;&#20363;&#26102;&#65292;&#23601;&#20250;&#35843;&#29992;&#36825;&#20010;&#26041;&#27861;&#12290;<code>LoggerService<\/code>&#23427;&#20250;&#33258;&#21160;&#36890;&#36807;&#23450;&#20041;&#30340;&#35760;&#24405;&#22120;&#23454;&#20363;&#20256;&#36882;&#65292;&#28385;&#36275;&#20381;&#36182;&#12290;<\/p><h2>setter&#27880;&#20837;<\/h2><p>&#22914;&#26524;&#20381;&#36182;&#39033;&#19981;&#26159;&#26381;&#21153;&#36816;&#34892;&#25152;&#24517;&#38656;&#30340;&#65292;&#25110;&#32773;&#38656;&#35201;&#22312;&#31245;&#21518;&#35774;&#32622;&#65292;&#21017;&#21487;&#20197;&#20351;&#29992;setter&#27880;&#20837;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#36827;&#34892;&#30340;&#65306;<\/p><pre><code>namespace AppService;\n\nuse AppLoggerLoggerInterface;\n\nclass SomeService {\n  private $logger;\n\n  public function setLogger(LoggerInterface $logger) {\n    $this-&gt;logger = $logger;\n  }\n}\n<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#26126;&#30333;&#20320;&#22312;&#35828;&#20160;&#20040;&#12290;<code>services.yaml<\/code>&#24744;&#21487;&#20197;&#25351;&#23450;&#35843;&#29992;&#35774;&#32622;&#26041;&#27861;&#30340;&#35843;&#29992;&#65306;<\/p><pre><code># config\/services.yaml\nservices:\n  AppServiceSomeService:\n    calls:\n      - method: 'setLogger'\n        arguments: ['@AppLoggerLoggerInterface']\n<\/code><\/pre><p>&#36825;&#25351;&#31034;&#26381;&#21153;&#23481;&#22120;&#35843;&#29992;<code>setLogger<\/code>&#22312;&#26381;&#21153;&#23454;&#20363;&#21270;&#21518;&#65292;&#36890;&#36807;&#27880;&#20837;&#26085;&#24535;&#35760;&#24405;&#22120;&#20381;&#36182;&#39033;&#26469;&#23454;&#29616;&#26041;&#27861;&#12290;<\/p><h2>&#23646;&#24615;&#27880;&#20837;<\/h2><p>&#23613;&#31649;&#36825;&#31181;&#24773;&#20917;&#36739;&#20026;&#32597;&#35265;&#65292;&#19988;&#19981;&#34987;&#35270;&#20026;&#26368;&#20339;&#23454;&#36341;&#65292;&#22240;&#20026;&#21487;&#33021;&#20250;&#30772;&#22351;&#23553;&#35013;&#24615;&#65292;&#20294;&#20320;&#21487;&#20197;&#30452;&#25509;&#23558;&#20381;&#36182;&#27880;&#20837;&#21040;&#23646;&#24615;&#20013;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#23454;&#29616;&#31034;&#20363;&#65306;<\/p><pre><code>namespace AppService;\n\nuse AppLoggerLoggerInterface;\n\nclass AnotherService {@Inject}\n  public $logger;\n}\n<\/code><\/pre><p>&#20351;&#29992;&#23646;&#24615;&#27880;&#20837;&#37197;&#32622;&#65292;&#35831;&#21442;&#38405;&#20197;&#19979;&#27493;&#39588;&#65306;<code>services.yaml<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code># config\/services.yaml\nservices:\n  AppServiceAnotherService:\n    properties:\n      $logger: '@AppLoggerLoggerInterface'\n<\/code><\/pre><p>&#35831;&#27880;&#24847;&#65292;&#23646;&#24615;&#27880;&#20837;&#20165;&#22312;&#29305;&#27530;&#24773;&#20917;&#19979;&#20351;&#29992;&#65292;&#22240;&#20026;&#23427;&#26292;&#38706;&#20102;&#26381;&#21153;&#30340;&#20869;&#37096;&#32454;&#33410;&#65292;&#24182;&#21487;&#33021;&#22797;&#26434;&#21270;&#21333;&#20803;&#27979;&#35797;&#12290;<\/p><h2>&#25509;&#21475;&#27880;&#20837;<\/h2><p>&#20381;&#36182;&#27880;&#20837;&#30340;&#24418;&#24335;&#35201;&#27714;&#25509;&#25910;&#31867;&#23454;&#29616;&#19968;&#20010;&#25509;&#21475;&#65292;&#35813;&#25509;&#21475;&#26377;&#19968;&#20010;&#26041;&#27861;&#20250;&#25509;&#25910;&#20381;&#36182;&#39033;&#12290;&#22312;Symfony&#20013;&#65292;&#30001;&#20110;&#26500;&#36896;&#20989;&#25968;&#21644;setter&#27880;&#20837;&#24050;&#32463;&#36275;&#22815;&#35206;&#30422;&#22823;&#22810;&#25968;&#29992;&#20363;&#65292;&#22240;&#27492;&#36825;&#31181;&#27169;&#24335;&#20351;&#29992;&#24471;&#36739;&#23569;&#12290;<\/p><h2>&#39640;&#32423;&#26041;&#27861;<\/h2><p>&#38543;&#30528;&#20320;&#22312;Symfony&#20013;&#30340;&#36827;&#23637;&#65292;&#20320;&#21487;&#33021;&#20250;&#36935;&#21040;&#20854;&#20182;&#31867;&#22411;&#30340;&#20381;&#36182;&#27880;&#20837;&#38656;&#27714;&#65292;&#22914;&#26041;&#27861;&#27880;&#20837;&#21644;&#24037;&#21378;&#27880;&#20837;&#12290;&#36825;&#20123;&#26159;&#26356;&#22797;&#26434;&#30340;&#26041;&#27861;&#65292;&#23558;&#22312;&#29305;&#23450;&#20027;&#39064;&#30340;&#25945;&#31243;&#20013;&#36827;&#34892;&#35814;&#32454;&#35828;&#26126;&#12290;<\/p><h2>&#26368;&#20339;&#23454;&#36341;&#65306;&#20381;&#36182;&#27880;&#20837;&#65288;Dependency Injection&#65289;<\/h2><p>&#22312;&#27880;&#20837;&#20381;&#36182;&#39033;&#26102;&#65292;&#21153;&#24517;&#29282;&#35760;&#20197;&#19979;&#26368;&#20339;&#23454;&#36341;&#65306;<\/p><p>&#20445;&#25345;&#20381;&#36182;&#23618;&#27425;&#32467;&#26500;&#27973;&#65292;&#20197;&#36991;&#20813;&#22797;&#26434;&#24615;&#21472;&#21152;&#24182;&#30830;&#20445;&#26368;&#20339;&#24615;&#33021;&#12290;<\/p><p>&#22312;&#24517;&#35201;&#26102;&#25165;&#36991;&#20813;&#23646;&#24615;&#27880;&#20837;&#12290;<\/p><p>&#20351;&#29992;&#25509;&#21475;&#20195;&#26367;&#20855;&#20307;&#30340;&#31867;&#26469;&#23450;&#20041;&#20381;&#36182;&#20851;&#31995;&#65292;&#36825;&#21487;&#20197;&#20419;&#36827;&#26494;&#32806;&#21512;&#21644;&#26356;&#23481;&#26131;&#30340;&#27979;&#35797;&#12290;<\/p><p>&#25512;&#33616;&#20351;&#29992;&#26500;&#36896;&#20989;&#25968;&#27880;&#20837;&#65292;&#20197;&#30830;&#20445;&#26381;&#21153;&#22987;&#32456;&#22788;&#20110;&#26377;&#25928;&#29366;&#24577;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#24635;&#32467;&#19968;&#19979;&#65292;Symfony&#30340;&#20381;&#36182;&#27880;&#20837;&#25216;&#26415;&#20351;&#24471;&#24320;&#21457;&#32773;&#33021;&#22815;&#20445;&#25345;&#20195;&#30721;&#25972;&#27905;&#19988;&#35299;&#32806;&#12290;&#27491;&#30830;&#20351;&#29992;&#27880;&#20837;&#26041;&#27861;&#26377;&#21161;&#20110;&#20351;&#26381;&#21153;&#28789;&#27963;&#19988;&#26131;&#20110;&#27979;&#35797;&#12290;&#36981;&#24490;&#25152;&#23637;&#31034;&#30340;&#21407;&#21017;&#21644;&#23454;&#36341;&#65292;&#21487;&#20197;&#35753;&#20320;&#30340;Symfony&#24212;&#29992;&#31243;&#24207;&#21464;&#24471;&#26356;&#21152;&#20581;&#22766;&#21644;&#21487;&#25193;&#23637;&#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;&#20351;&#29992;Symfony&#26694;&#26550;&#26102;&#65292;&#20381;&#36182;&#27880;&#20837;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#35774;&#35745;&#27169;&#24335;&#65292;&#23427;&#20801;&#35768;&#24744;&#23558;&#23545;&#35937;&#30340;&#23454;&#20363;&#20316;&#20026;&#21442;&#25968;&#20256;&#36882;&#32473;&#20989;&#25968;&#65292;&#24182;&#36890;&#36807;&#36825;&#20123;&#21442;&#25968;&#26469;&#21019;&#24314;&#26032;&#30340;&#23545;&#35937;&#12290;&#20197;&#19979;&#26159;&#23558;&#20381;&#36182;&#27880;&#20837;&#21040;&#26381;&#21153;&#20013;&#30340;&#22522;&#26412;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>&#23450;&#20041;&#26381;&#21153;&#25509;&#21475;&#65306;&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23450;&#20041;&#19968;&#20010;&#26381;&#21153;&#25509;&#21475;&#65292;&#35813;&#25509;&#21475;&#23450;&#20041;&#20102;&#20320;&#24076;&#26395;&#26381;&#21153;&#23454;&#29616;&#30340;&#25152;&#26377;&#21151;&#33021;&#21644;&#34892;&#20026;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use SymfonyComponentHttpKernelBundleBundle;\n\ninterface MyServiceInterface {\n    public function myMethod();\n}<\/code><\/pre>\n<ol start=\"2\">\n<li>&#21019;&#24314;&#26381;&#21153;&#31867;&#65306;&#28982;&#21518;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#26381;&#21153;&#31867;&#65292;&#32487;&#25215;&#33258;<code>MyServiceInterface<\/code>&#24182;&#23454;&#29616;&#36825;&#20010;&#25509;&#21475;&#12290;&#22312;&#36825;&#20010;&#31867;&#20013;&#65292;&#20320;&#21487;&#20197;&#28155;&#21152;&#20219;&#20309;&#20320;&#24819;&#25552;&#20379;&#30340;&#26041;&#27861;&#25110;&#32773;&#23646;&#24615;&#12290;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">class MyService implements MyServiceInterface {\n    public function myMethod() {\n        \/\/ &#36825;&#37324;&#26159;&#20320;&#30340;&#19994;&#21153;&#36923;&#36753;\n    }\n}<\/code><\/pre>\n<ol start=\"3\">\n<li>&#27880;&#20837;&#20381;&#36182;&#65306;&#26368;&#21518;&#65292;&#20320;&#38656;&#35201;&#21521;&#20320;&#30340;&#26381;&#21153;&#25552;&#20379;&#32773;&#25110;&#20854;&#20182;&#32452;&#20214;&#65288;&#22914;&#25511;&#21046;&#22120;&#65289;&#27880;&#20837;&#36825;&#20010;&#26381;&#21153;&#31867;&#12290;&#36825;&#36890;&#24120;&#26159;&#22312;&#37197;&#32622;&#25991;&#20214;&#20013;&#23436;&#25104;&#30340;&#65292;&#20294;&#22312;&#23454;&#38469;&#39033;&#30446;&#20013;&#65292;&#20320;&#21487;&#33021;&#20250;&#20351;&#29992;&#23481;&#22120;&#31649;&#29702;&#22120;&#65288;&#22914;<code>yiisoft\/yii2-Yii<\/code>&#25110;<code>symfony\/dependency-injection<\/code>)&#12290;<\/li>\n<\/ol>\n<p>&#20363;&#22914;&#65292;&#22312;&#19968;&#20010;&#31616;&#21333;&#30340;<code>composer.json<\/code>&#25991;&#20214;&#20013;&#65306;<\/p>\n<pre><code class=\"language-json\">{\n    \"require\": {\n        \"yiisoft\/yii2-Yii\": \"^2.0\",\n        \"symfony\/dependency-injection\": \"^5.4\"\n    },\n    \"config\": {\n        \"bin-dir\": \".\",\n        \"cache-base-path\": \"\/tmp\/.cache\/yiisoft\/yii2-Yii\/\"\n    }\n}<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#24403;&#20320;&#36816;&#34892;<code>yii run<\/code>&#21629;&#20196;&#26102;&#65292;Symfony&#23481;&#22120;&#20250;&#33258;&#21160;&#20174;<code>composer.json<\/code>&#21152;&#36733;&#25152;&#38656;&#30340;&#20381;&#36182;&#65292;&#24182;&#20026;&#20320;&#25552;&#20379;&#19968;&#20010;&#21253;&#21547;&#25152;&#26377;&#24050;&#27880;&#20876;&#26381;&#21153;&#30340;&#26381;&#21153;&#23481;&#22120;&#12290;<\/p>\n<p>&#20363;&#22914;&#65306;<\/p>\n<pre><code class=\"language-bash\">$ yii run\nStarting development server...\n[  OK  ] \/var\/www\/html\/symfony-project\/app\/web\/index.php<\/code><\/pre>\n<p>&#36825;&#23601;&#26159;&#23558;&#20381;&#36182;&#27880;&#20837;&#21040;&#26381;&#21153;&#20013;&#30340;&#22522;&#26412;&#27493;&#39588;&#12290;&#22312;&#23454;&#36341;&#20013;&#65292;&#20320;&#21487;&#33021;&#38656;&#35201;&#26681;&#25454;&#20855;&#20307;&#38656;&#27714;&#35843;&#25972;&#36825;&#20123;&#27493;&#39588;&#65292;&#20294;&#24635;&#20307;&#19978;&#20445;&#25345;&#19968;&#33268;&#21363;&#21487;&#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;&#65292;&#20381;&#36182;&#27880;&#20837;&#65288;Dependency Injection, DI&#65289;&#26159;&#19968;&#31181;&#038;#3..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1092","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\/1092","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=1092"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1092"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1092"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}