我的Symfony应用程序有一个非常奇怪的问题。在symfony 3.0.9上一切正常,但升级到3.1(当前运行3.1.3)时,几乎所有控制器都出现以下错误:
" Controller" Name_of_Controller :: name_of_method"需要你 为" $ request"提供价值争论(因为没有 默认值或因为此后有一个非可选参数 一。)"
以下是导致此错误的方法示例:
/**
* This method handles add faculty
* requests
*
* @param Request $request html request
*
* @return Response html response
*
**/
public function addAction(Request $request)
{
// create a new Faculty
$faculty = new Faculty();
$faculty->setFirstname('Enter First Name');
$faculty->setLastname('Enter Last Name');
$form = $this->createForm(FacultyType::class, $faculty);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$task = $request->get('Submit');
// let see what the user wants
switch ($task) {
case 'Add':
// user wants to add
// we are setting the fullname of the object
$lname = $form->getData()->getLastname();
$fname = $form->getData()->getFirstname();
$faculty->setFullname("$lname, $fname");
$em = $this->getDoctrine()->getManager();
$em->persist($faculty);
$em->flush();
// report success
$this->addFlash('success', "The faculty member $faculty was successfully saved!");
return $this->redirectToRoute('faculty_index');
break;
case 'Cancel':
// report failure
$this->addFlash('failure', "The action was cancelled. No faculty member was saved!");
return $this->redirectToRoute('faculty_index');
}
}
return $this->render(
'faculty/add.html.twig',
[
'form' => $form->createView(),
]
);
}
此方法的xml路由如下:
<route id="faculty_add" path="/add" methods="GET POST">
<default key="_controller">AppBundle:Faculty:add</default>
</route>
如上所述,它只发生在3.1上,整个应用程序在3.0.9上正常工作。
有人见过这个吗?我在3.1中公布的代码中是否存在结构问题(我不是专业编码人员......)
谢谢!
安德烈亚斯
答案 0 :(得分:0)
这不是一个明确的答案,但可能会对那些有类似问题的其他业余爱好者有所帮助:
使用php7.0而不是7.1时问题消失了。在php 7.1上运行symfony 3.0.x时也是如此。
仅在使用php 7.1和symfony 3.1时才会持续存在。 当我尝试dev和prod环境时,重复清空缓存,并且可以在Digital Ocean Ubuntu Droplet和我的MacBook Pro上重现这一点,我无法想象这是一个缓存问题。
不确定这是否是一个真正的错误,或者我的代码中存在导致此问题的内容。
如果我找到问题的更明确原因,我会更新这个。
答案 1 :(得分:0)
<强>编辑:强>
我终于找到了问题的原因(对我来说):有一个错字:
use Symfony\Component\HttpFoundation\Request;
(小写字母而不是大写字母)。奇怪的是:它已经使用了所有Symfony / PHP版本(来自Sf-2.6和PHP-5.4)多年,并且最近出现了下面提到的Sf / PHP版本的问题。
PHP命名空间不区分大小写,但Symfony的解析器似乎有时区分大小写......
上一个回答:
似乎这种行为是由于PHP 7.1中的“ReflectionType改进”功能:pull request。
有关Symfony的后果已在此问题上报告:github.com/symfony/symfony/issues/19677(对不起,我不能用我的声誉创建超过2个链接......)。
此后该功能已被恢复:ticket。