2016-08-29 6 views
0

Symfony 응용 프로그램에 이상한 문제가 있습니다. 여기 symfony 3.0.9에서 3.1.3으로 업그레이드 한 후 이상한 컨트롤러 오류가 발생했습니다.

"Controller "Name_of_Controller::name_of_method" requires that you provide a value for the "$request" argument (because there is no default value or because there is a non optional argument after this one)."

이 오류가 발생하는 방법의 예입니다 : 3.1 (현재 3.1.3을 실행하는) 내가 거의 모든 컨트롤러와 함께 다음과 같은 오류가 업그레이드 할 때 모든 심포니 3.0.9에서 잘 작동되지만, 다음과 같이이 방법

/** 
* 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.0.9에서 잘 작동, 3.1에서 발생합니다.

다른 사람이 본 적이 있습니까? 3.1에서 공개 된 코드에 구조적 문제가 있습니까? (전문적인 코더가 아닙니다 ...)

감사합니다!

안드레아스

+0

업그레이드 후 캐시를 지우셨습니까? 요청이 제대로 네임 스페이스입니까? 어쩌면 경로 정의로 질문을 업데이트 할 수 있습니다. 캐시 지우기가 문제를 일으킬 수있는 유일한 것입니다. – Cerad

+0

캐시를 정리하십시오. 'bin/console cache : clear' – ciurciurek

+0

예. 모든 것을 끝냈다. 내가 관심을 가질만한 다른 것을 찾았습니다. php7.0으로 symfony^3.1을 실행할 때 문제가 사라집니다. 이 문제는 php> 7.0에서 symfony> 3.0에서만 발생합니다. – Andreas

답변

0

이것은 확실한 대답 아니지만, 비슷한 문제를 가지고 거기에 그 다른 취미 코더 도움이 될 수 있습니다

7.1 대신 php7.0을 사용할 때 문제가 사라집니다. PHP 7.1에서 symfony 3.0.x를 실행할 때도 마찬가지입니다.

php와 symfony를 모두 사용할 때만 지속됩니다. dev 환경과 prod 환경 모두를 시도해 보았을 때 캐시를 반복적으로 비울 수 있었고 Digital Ocean Ubuntu 물방울과 MacBook Pro에서이를 재현 할 수있었습니다. 캐싱 문제라고 상상할 수 없습니다.

이 버그가 true 버그인지 또는이 문제를 일으키는 내 코드에 무언가가 있는지는 확실하지 않습니다.

문제의 원인이 더 확실 할 경우이를 업데이트하겠습니다.

0

편집 :

나는 마지막으로 (나를 위해) 문제의 원인을 발견 :

use Symfony\Component\HttpFoundation\Request; 

(소문자가 아닌 대문자)에 오타가 있었다. 이상한 일 : 그것은 Symfony/PHP 버전 (Sf-2.6과 PHP-5.4)에서 수년간 일해 왔으며 최근에 Sf/PHP 버전에서 문제가되었습니다.

이 동작은 "ReflectionType 개선"에 의한 것 같습니다 :

이전 대답은 ...

PHP 네임 스페이스는 대소 문자를 구분하지만, 심포니의 리졸버는 때때로 대소 문자를 구분 것 같다 PHP 7.1의 특징 : pull request.

Symfony에 대한 결과가이 문제에 대해보고되었습니다. github.com/symfony/symfony/issues/19677 (미안하지만, 평판과 함께 2 개 이상의 링크를 만들 수 없습니다 ...).

이 기능은 그 이후로 되돌아 왔습니다 : ticket.

+0

Symfony-3.1.3 및 PHP-7.0.10과 Symfony-3.1.5 및 PHP-7.0.11에서 여전히 문제가 있습니다 ... –

+0

지금 Symfony-3.1.6 및 PHP-5.6.24뿐만 아니라 PHP-7.0.12에서도이 문제가 발생합니다. –

관련 문제