从symfony 3.0.9升级到3.1.3后出现奇怪的控制器错误

时间:2016-08-29 20:08:24

标签: exception controller request upgrade symfony

我的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中公布的代码中是否存在结构问题(我不是专业编码人员......)

谢谢!

安德烈亚斯

2 个答案:

答案 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