【发布时间】:2020-09-17 01:57:38
【问题描述】:
我正在尝试将控制器中的主要方法划分为两个独立的方法 - 一个用于返回生成的表单,一个用于以这种形式上传文件。但是我无法用我的想法来理解它是如何做到的......
这是我目前工作的控制器:
class UploaderController extends AbstractController
{
private ConfigVendors $configVendors;
public function __construct(ConfigVendors $configVendors)
{
$this->configVendors = $configVendors;
}
/**
* @Route("/", name="upload_terms")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function formRender(Request $request, TranslatorInterface $translator)
{
/** @var UploadedFile $uploadedFile */
$formUploader = new FormUploader();
$form = $this->createForm(FormUploaderType::class, $formUploader);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$catalog = $request->request->get('form_uploader')['service'];
$fileNameGenerator = new FileNameGenerator($request);
$originalFileName = $fileNameGenerator->getOriginalFilename();
$tmpPath = $fileNameGenerator->getFilePath();
$upload = new Uploader($catalog.'/'.$originalFileName, file_get_contents($tmpPath));
if (!$upload->gitlabUpload()) {
$this->addFlash('danger', $translator->trans('uploadTermsError'));
} else {
$url = $this->configVendors->vendorUrl($catalog).'/'.$catalog.'/'.$originalFileName;
$this->addFlash('success', $translator->trans('uploadTermsSuccess'));
$this->addFlash('info', $url.'<br><a href="'.$url.'" target="_blank">Podgląd</a> <br><br> Plik będzie dostępny po kilku minutach, proszę o cierpliwość!');
}
return $this->redirectToRoute('upload_terms');
}
return $this->render('uploader/upload.html.twig', [
'createForm' => $form->createView(),
]);
}
}
这是我试图划分它的尝试......
/**
* @Route("/", name="upload_terms")
*/
public function getIndexAction()
{
/** @var UploadedFile $uploadedFile */
$formUploader = new FormUploader();
$form = $this->createForm(FormUploaderType::class, $formUploader);
return $this->render('uploader/upload.html.twig', [
'createForm' => $form->createView(),
]);
}
/**
* @Route("/", name="upload_terms")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function formUpload(Request $request, TranslatorInterface $translator)
{
/** @var UploadedFile $uploadedFile */
$formUploader = new FormUploader();
$form = $this->createForm(FormUploaderType::class, $formUploader);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$catalog = $request->request->get('form_uploader')['service'];
$fileNameGenerator = new FileNameGenerator($request);
$originalFileName = $fileNameGenerator->getOriginalFilename();
$tmpPath = $fileNameGenerator->getFilePath();
$upload = new Uploader($catalog.'/'.$originalFileName, file_get_contents($tmpPath));
if (!$upload->gitlabUpload()) {
$this->addFlash('danger', $translator->trans('uploadTermsError'));
} else {
$url = $this->configVendors->vendorUrl($catalog).'/'.$catalog.'/'.$originalFileName;
$this->addFlash('success', $translator->trans('uploadTermsSuccess'));
$this->addFlash('info', $url.'<br><a href="'.$url.'" target="_blank">Podgląd</a> <br><br> Plik będzie dostępny po kilku minutach, proszę o cierpliwość!');
}
return $this->redirectToRoute('upload_terms');
}
}
【问题讨论】:
-
你的问题是什么?这样做是不可能的,因为您无法在一个请求上触发两个操作(至少在不编写更多代码的情况下不会)。更好的解决方案可能是使用单独的服务
标签: php forms symfony methods controller