{"id":1062,"date":"2025-06-12T11:44:03","date_gmt":"2025-06-12T03:44:03","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1062.html"},"modified":"2025-06-12T11:44:03","modified_gmt":"2025-06-12T03:44:03","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8symfony%e4%b8%ad%e4%b8%8a%e4%bc%a0%e6%96%87%e4%bb%b6","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1062.html","title":{"rendered":"\u5982\u4f55\u5728Symfony\u4e2d\u4e0a\u4f20\u6587\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>&#22312;Symfony&#20013;&#19978;&#20256;&#25991;&#20214;&#26159;&#19968;&#20010;&#24120;&#35265;&#30340;&#38656;&#27714;&#65292;&#21487;&#20197;&#20351;&#29992;&#20869;&#32622;&#30340;<code>FileUploadComponent<\/code>&#26469;&#23454;&#29616;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#22914;&#20309;&#22312;Symfony&#24212;&#29992;&#20013;&#19978;&#20256;&#25991;&#20214;&#12290;<\/p>\n<h3>1. &#23433;&#35013;&#24517;&#35201;&#30340;&#21253;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102;<code>symfony\/console<\/code>&#21644;<code>symfony\/maker-bundle<\/code>&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/console symfony\/maker-bundle<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#29983;&#25104;&#19968;&#20010;&#26032;&#30340;&#21629;&#20196;&#26469;&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console make:command UploadFileCommand<\/code><\/pre>\n<h3>2. &#32534;&#36753;&#21629;&#20196;&#31867;<\/h3>\n<p>&#25171;&#24320;&#29983;&#25104;&#30340;<code>UploadFileCommand.php<\/code>&#25991;&#20214;&#65292;&#24182;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyComponentConsoleCommandCommand;\nuse SymfonyComponentConsoleInputInputInterface;\nuse SymfonyComponentConsoleOutputOutputInterface;\nuse SymfonyComponentFilesystemFilesystem;\n\nclass UploadFileCommand extends Command\n{\n    protected static $defaultName = 'app:upload-file';\n\n    protected function configure()\n    {\n        $this-&gt;setDescription('Upload a file');\n        $this-&gt;addArgument('file', InputArgument::REQUIRED, 'The file to upload');\n    }\n\n    protected function execute(InputInterface $input, OutputInterface $output)\n    {\n        $file = $input-&gt;getArgument('file');\n\n        \/\/ &#26816;&#26597;&#25991;&#20214;&#26159;&#21542;&#23384;&#22312;\n        if (!file_exists($file)) {\n            $output-&gt;writeln(\"File not found: $file\");\n            return Command::FAILURE;\n        }\n\n        \/\/ &#33719;&#21462;&#19978;&#20256;&#30446;&#24405;&#65288;&#40664;&#35748;&#26159;web\/uploads&#65289;\n        $uploadDir = __DIR__ . '\/..\/public\/uploads';\n        $filesystem = new Filesystem();\n\n        \/\/ &#21019;&#24314;&#19978;&#20256;&#30446;&#24405;&#22914;&#26524;&#19981;&#23384;&#22312;\n        if (!$filesystem-&gt;exists($uploadDir)) {\n            $filesystem-&gt;mkdir($uploadDir);\n        }\n\n        \/\/ &#33719;&#21462;&#25991;&#20214;&#21517;\n        $fileName = basename($file);\n\n        \/\/ &#26500;&#24314;&#23436;&#25972;&#30340;&#25991;&#20214;&#36335;&#24452;\n        $filePath = $uploadDir . '\/' . $fileName;\n\n        \/\/ &#31227;&#21160;&#25991;&#20214;&#21040;&#25351;&#23450;&#20301;&#32622;\n        if ($filesystem-&gt;move($file, $filePath)) {\n            $output-&gt;writeln(\"File uploaded successfully: $filePath\");\n            return Command::SUCCESS;\n        } else {\n            $output-&gt;writeln(\"Failed to upload file: $file\");\n            return Command::FAILURE;\n        }\n    }\n}<\/code><\/pre>\n<h3>3. &#37197;&#32622;&#36335;&#30001;<\/h3>\n<p>&#22312;<code>config\/routes.yaml<\/code>&#25991;&#20214;&#20013;&#37197;&#32622;&#36825;&#20010;&#21629;&#20196;&#65306;<\/p>\n<pre><code class=\"language-yaml\">app:\n    commands:\n        - AppCommandUploadFileCommand<\/code><\/pre>\n<h3>4. &#36816;&#34892;&#21629;&#20196;<\/h3>\n<p>&#29616;&#22312;&#20320;&#21487;&#20197;&#36816;&#34892;&#36825;&#20010;&#21629;&#20196;&#26469;&#19978;&#20256;&#25991;&#20214;&#20102;&#65306;<\/p>\n<pre><code class=\"language-bash\">php bin\/console app:upload-file \/path\/to\/your\/file.jpg<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;&#25511;&#21046;&#22120;&#20013;&#35843;&#29992;&#36825;&#20010;&#21629;&#20196;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpKernelExceptionNotFoundHttpException;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass FileUploadController extends AbstractController\n{\n    \/**\n     * @Route(\"\/upload\", name=\"upload_file\")\n     *\/\n    public function upload(Request $request)\n    {\n        $file = $request-&gt;files-&gt;get('file');\n\n        if (null === $file) {\n            throw new NotFoundHttpException('No file was submitted.');\n        }\n\n        $command = $this-&gt;get('console.command.upload_file');\n        $result = $command-&gt;run(['--file' =&gt; $file-&gt;getPathname()]);\n\n        if ($result-&gt;isSuccessful()) {\n            return $this-&gt;json([\n                'message' =&gt; 'File uploaded successfully',\n                'path' =&gt; $file-&gt;getPathname(),\n            ]);\n        } else {\n            return $this-&gt;json([\n                'error' =&gt; 'Failed to upload file',\n            ], 500);\n        }\n    }\n}<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#22312;Symfony&#24212;&#29992;&#20013;&#36731;&#26494;&#22320;&#23454;&#29616;&#25991;&#20214;&#19978;&#20256;&#21151;&#33021;&#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;Web&#24212;&#29992;&#31243;&#24207;&#20013;&#19978;&#20256;&#25991;&#20214;&#26159;&#19968;&#39033;&#24120;&#35265;&#30340;&#38656;&#27714;&#12290;Symfony&#65292;&#19968;&#20010;&#29992;&#20110;&#22788;&#29702;&#32593;&#31449;&#39033;&#30446;&#30340;&#22810;&#21151;&#33021;PHP&#26694;&#26550;&#65292;&#25552;&#20379;&#20102;&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#30340;&#24378;&#22823;&#24037;&#20855;&#12290;&#26412;&#25945;&#31243;&#23558;&#25351;&#23548;&#24744;&#36890;&#36807;&#35774;&#32622;&#39033;&#30446;&#21040;&#39564;&#35777;&#21644;&#23384;&#20648;&#19978;&#20256;&#30340;&#25991;&#20214;&#30340;&#36807;&#31243;&#12290;<\/p><p>&#22312;&#24320;&#22987;&#23454;&#38469;&#19978;&#20256;&#36807;&#31243;&#20043;&#21069;&#65292;&#24744;&#24517;&#39035;&#26377;&#19968;&#20010;&#36816;&#34892;&#20013;&#30340;Symfony&#39033;&#30446;&#12290;&#22914;&#26524;&#24744;&#23545;Symfony&#36824;&#19981;&#29087;&#24713;&#65292;&#35831;&#26597;&#30475;&#23448;&#26041;&#25991;&#26723;&#20197;&#23398;&#20064;&#22914;&#20309;&#21551;&#21160;&#19968;&#20010;&#26032;&#30340;Symfony&#39033;&#30446;&#12290;&#30830;&#20445;&#24744;&#20063;&#23433;&#35013;&#20102;Symfony CLI&#65292;&#24182;&#19988;Composer&#65288;PHP&#30340;&#20381;&#36182;&#31649;&#29702;&#24037;&#20855;&#65289;&#24050;&#20934;&#22791;&#22909;&#20351;&#29992;&#12290;<\/p><h2>&#35774;&#32622;<\/h2><p>&#22312;&#20219;&#20309;&#25991;&#20214;&#19978;&#20256;&#21151;&#33021;&#20013;&#65292;&#39318;&#20808;&#38656;&#35201;&#19968;&#20010;&#34920;&#21333;&#12290;&#22312;Symfony&#20013;&#65292;&#34920;&#21333;&#20351;&#29992;Form&#32452;&#20214;&#21019;&#24314;&#12290;&#24320;&#22987;&#26102;&#65292;&#21019;&#24314;&#19968;&#20010;&#19982;&#19978;&#20256;&#36807;&#31243;&#30456;&#20851;&#30340;&#34920;&#21333;&#31867;&#12290;<\/p><pre><code>php bin\/console make:form UploadFileType<\/code><\/pre><p>&#35813;&#21629;&#20196;&#20250;&#29983;&#25104;&#19968;&#20010;&#26032;&#30340;&#34920;&#21333;&#31867;&#12290;<code>Form<\/code>&#30446;&#24405;&#12290;&#35831;&#25171;&#24320;&#29983;&#25104;&#30340;PHP&#25991;&#20214;&#24182;&#23450;&#20041;&#29992;&#20110;&#19978;&#20256;&#36807;&#31243;&#25152;&#38656;&#30340;&#23383;&#27573;&#65292;&#20363;&#22914;&#65306;<\/p><pre><code>\/\/ src\/Form\/UploadFileType.php\nnamespace AppForm;\n\nuse SymfonyComponentFormAbstractType;\nuse SymfonyComponentFormExtensionCoreTypeFileType;\nuse SymfonyComponentFormFormBuilderInterface;\nuse SymfonyComponentOptionsResolverOptionsResolver;\n\nclass UploadFileType extends AbstractType\n{\n    public function buildForm(FormBuilderInterface $builder, array $options)\n    {\n        $builder\n            -&gt;add('upload_file', FileType::class, [\n                'label' =&gt; 'File to upload',\n                'mapped' =&gt; false, \/\/ and so on...\n<\/code><\/pre><p>&#27880;&#24847;&ldquo;&#26144;&#23556;&rdquo;&#36873;&#39033;&#24050;&#35774;&#32622;&#20026;false&#65292;&#22240;&#20026;&#20320;&#19981;&#38656;&#35201;&#30452;&#25509;&#20851;&#32852;&#27492;&#23383;&#27573;&#19982;&#20219;&#20309;&#23454;&#20307;&#23646;&#24615;&#12290;<\/p><h2>&#21019;&#24314;&#25511;&#21046;&#22120;<\/h2><p>&#25509;&#19979;&#26469;&#65292;&#20320;&#38656;&#35201;&#20026;&#22788;&#29702;&#34920;&#21333;&#25552;&#20132;&#21644;&#25991;&#20214;&#19978;&#20256;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#65306;<\/p><pre><code>\/\/ src\/Controller\/UploadFileController.php\nnamespace AppController;\n\nuse AppFormUploadFileType;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationFileExceptionFileException;\n\nclass UploadFileController extends AbstractController\n{\n    \/**\n     * @Route(\"\/upload\", name=\"app_upload\")\n     *\/\n    public function index(Request $request)\n    {\n        $form = $this-&gt;createForm(UploadFileType::class);\n        $form-&gt;handleRequest($request);\n\n        if ($form-&gt;isSubmitted() &amp;&amp; $form-&gt;isValid()) {\n            $file = $form['upload_file']-&gt;getData();\n            \/\/ Uploading process goes here...\n        }\n\n        return $this-&gt;render('upload\/index.html.twig', [\n            'form' =&gt; $form-&gt;createView(),\n        ]);\n    }\n}<\/code><\/pre><h2>&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#25805;&#20316;<\/h2><p>&#22909;&#30340;&#65292;&#35753;&#25105;&#20204;&#22312;&#25511;&#21046;&#22120;&#20869;&#37096;&#32534;&#20889;&#20195;&#30721;&#26469;&#22788;&#29702;&#23454;&#38469;&#30340;&#25991;&#20214;&#19978;&#20256;&#12290;&#20351;&#29992; try-catch &#22359;&#21487;&#20197;&#22788;&#29702;&#22312;&#25991;&#20214;&#19978;&#20256;&#36807;&#31243;&#20013;&#21487;&#33021;&#20986;&#29616;&#30340;&#20219;&#20309;&#24322;&#24120;&#12290;<\/p><pre><code>\/\/ Inside your controller action\n\/\/ Uploading process\nif ($file) {\n    $originalFilename = pathinfo($file-&gt;getClientOriginalName(), PATHINFO_FILENAME);\n    $newFilename = $originalFilename.'-'.uniqid().'.'.$file-&gt;guessExtension();\n\n    try {\n        $file-&gt;move($this-&gt;getParameter('upload_directory'), $newFilename);\n        \/\/ Here, 'upload_directory' is a parameter you must define in your configuration\n    } catch (FileException $e) {\n        \/\/ Handle exception if something happens during file upload\n    }\n    \/\/ You might want to persist file information into the database\n}\n<\/code><\/pre><p>&#35831;&#30830;&#20445;&#22312;&#24744;&#30340;&#37197;&#32622;&#25991;&#20214;&#20013;&#35774;&#32622;&#22909;&ldquo;upload_directory&rdquo;&#21442;&#25968;&#65292;&#20363;&#22914;&#65306;<\/p><pre><code>\/\/ config\/services.yaml\nparameters:\n    upload_directory: '%kernel.project_dir%\/uploads'<\/code><\/pre><h2>&#39564;&#35777;<\/h2><p>Symfony &#25552;&#20379;&#20102;&#39564;&#35777;&#24037;&#20855;&#65292;&#21487;&#20197;&#22312;&#34920;&#21333;&#23383;&#27573;&#19978;&#20351;&#29992;&#36825;&#20123;&#24037;&#20855;&#65292;&#21253;&#25324;&#25991;&#20214;&#31867;&#22411;&#12290;&#23545;&#20110;&#36825;&#31181;&#24773;&#20917;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#27880;&#35299;&#12289;YAML &#25110; XML&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#20351;&#29992;&#27880;&#35299;&#30340;&#20363;&#23376;&#65306;<\/p><pre><code>\/\/ src\/Entity\/YourEntity.php\n\nuse SymfonyComponentValidatorConstraints as Assert;\n\n\/\/ ... Some other entity code\n\n\/**\n * @AssertFile(\n *     maxSize = \"1024k\",\n *     mimeTypes = {\"application\/pdf\", \"application\/x-pdf\"},\n *     mimeTypesMessage = \"Please upload a valid PDF document\"\n * )\n *\/\nprotected $file;\n<\/code><\/pre><h2>&#27491;&#22312;&#22788;&#29702;&#34920;&#21333;&#30340;&#25552;&#20132;&#12290;<\/h2><p>&#20320;&#38656;&#35201;&#20026;&#34920;&#21333;&#21019;&#24314;&#19968;&#20010;&#35270;&#22270;&#65292;&#24182;&#19988;&#22914;&#26524;&#36824;&#27809;&#26377;&#35774;&#32622;&#30340;&#35805;&#65292;&#36824;&#38656;&#35201;&#23450;&#20041;&#19968;&#20010;&#25511;&#21046;&#22120;&#30340;&#36335;&#30001;&#12290;&#22312;Twig&#27169;&#26495;&#20013;&#65292;&#21487;&#33021;&#30475;&#36215;&#26469;&#20687;&#36825;&#26679;&#65306;<\/p><pre><code>{# templates\/upload\/index.html.twig #}\n{{ form_start(form) }}\n    {{ form_row(form.upload_file) }}\n    Upload\n{{ form_end(form) }}<\/code><\/pre><h2>&#32467;&#35770;&#12290;<\/h2><p>&#36825;&#26159;&#32467;&#26463;&#65281;&#20320;&#29616;&#22312;&#24050;&#32463;&#20840;&#38754;&#22238;&#39038;&#20102;&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#30340;Symfony&#20027;&#35201;&#27493;&#39588;&#12290;&#25991;&#20214;&#19978;&#20256;&#21151;&#33021;&#23545;&#20110;&#29616;&#20195;Web&#24212;&#29992;&#31243;&#24207;&#33267;&#20851;&#37325;&#35201;&#12290;&#24471;&#30410;&#20110;&#20869;&#32622;&#30340;&#21151;&#33021;&#21644;&#32452;&#20214;&#65292;Symfony&#25552;&#20379;&#20102;&#22788;&#29702;&#19978;&#20256;&#30340;&#31616;&#27905;&#26041;&#24335;&#12290;&#35760;&#24471;&#26816;&#26597;&#25991;&#20214;&#23433;&#20840;&#24615;&#12289;&#39564;&#35777;&#20197;&#21450;&#22949;&#21892;&#23384;&#20648;&#25991;&#20214;&#12290;<\/p><p>&#32487;&#32493;&#23454;&#39564;&#21644;&#35843;&#25972;&#65292;&#20197;&#20102;&#35299;Symfony&#25991;&#20214;&#22788;&#29702;&#21151;&#33021;&#25152;&#33021;&#36798;&#21040;&#30340;&#20840;&#37096;&#31243;&#24230;&#12290;&#24320;&#24515;&#32534;&#31243;&#65281;<\/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&#26694;&#26550;&#20013;&#65292;&#20351;&#29992;PHP&#30340;<code>$_FILES<\/code>&#25968;&#32452;&#26469;&#22788;&#29702;&#19978;&#20256;&#30340;&#25991;&#20214;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#22312;<code>Form<\/code>&#31867;&#20013;&#22788;&#29702;&#25991;&#20214;&#19978;&#20256;&#30340;&#20363;&#23376;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyComponentFormAbstractType;\nuse SymfonyComponentFormExtensionCoreTypeFileType;\n\nclass MyFileUploadType extends AbstractType\n{\n    public function buildForm(FormBuilderInterface $builder, array $options)\n    {\n        $builder-&gt;add('file', FileType::class, [\n            'label' =&gt; 'Upload file',\n            'required' =&gt; true,\n        ]);\n    }\n\n    public function getName()\n    {\n        return 'my_file_upload';\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010;&#21517;&#20026;<code>MyFileUploadType<\/code>&#30340;&#26032;&#31867;&#22411;&#65292;&#23427;&#32487;&#25215;&#33258;<code>AbstractType<\/code>&#65292;&#24182;&#28155;&#21152;&#20102;&#20004;&#20010;&#23646;&#24615;&#65306;<code>file<\/code>&#21644;<code>file_type<\/code>&#12290;<\/p>\n<ul>\n<li><code>file<\/code>&#26159;<code>FileType<\/code>&#31867;&#22411;&#30340;&#23383;&#27573;&#65292;&#36825;&#24847;&#21619;&#30528;&#23427;&#23558;&#29992;&#20110;&#25509;&#25910;&#29992;&#25143;&#19978;&#20256;&#30340;&#25991;&#20214;&#12290;<\/li>\n<li><code>file_type<\/code>&#26159;<code>FileType<\/code>&#31867;&#22411;&#30340;&#23383;&#27573;&#65292;&#36825;&#20801;&#35768;&#25105;&#20204;&#22312;<code>buildForm()<\/code>&#26041;&#27861;&#20013;&#25351;&#23450;&#29305;&#23450;&#30340;&#25991;&#20214;&#31867;&#22411;&#65288;&#20363;&#22914;&#65292;&#22270;&#29255;&#26684;&#24335;&#65289;&#12290;<\/li>\n<\/ul>\n<p>&#28982;&#21518;&#65292;&#25105;&#20204;&#21487;&#20197;&#20687;&#19979;&#38754;&#36825;&#26679;&#20351;&#29992;&#36825;&#20010;&#31867;&#22411;&#65306;<\/p>\n<pre><code class=\"language-php\">$form = $this-&gt;createFormBuilder($entity)\n    -&gt;add('file', FileType::class, ['label' =&gt; 'Upload file'])\n    -&gt;getForm();<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#20351;&#29992;<code>$entity<\/code>&#20316;&#20026;&#39069;&#22806;&#30340;&#21442;&#25968;&#65292;&#20197;&#20415;&#21487;&#20197;&#20026;&#27599;&#20010;&#23545;&#35937;&#35774;&#32622;&#21333;&#29420;&#30340;&#34920;&#21333;&#12290;<\/p>\n<p>&#27880;&#24847;&#65306;&#22312;&#23454;&#38469;&#24212;&#29992;&#20013;&#65292;&#20320;&#21487;&#33021;&#38656;&#35201;&#26681;&#25454;&#20320;&#30340;&#20855;&#20307;&#38656;&#27714;&#35843;&#25972;&#36825;&#20123;&#37197;&#32622;&#12290;&#20363;&#22914;&#65292;&#20320;&#21487;&#33021;&#38656;&#35201;&#26816;&#26597;&#25991;&#20214;&#22823;&#23567;&#65292;&#25110;&#32773;&#39564;&#35777;&#25991;&#20214;&#26684;&#24335;&#31561;&#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;&#19978;&#20256;&#25991;&#20214;&#26159;&#19968;&#20010;&#24120;&#35265;&#30340;&#38656;&#27714;&#65292;&#038;#214..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1062","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\/1062","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=1062"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1062"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1062"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}