2016-08-29 9 views
0

Symfonyアプリケーションに非常に奇妙な問題があります。すべてはsymfonyの3.0.9で正常に動作しますが、3.1にアップグレードするとき(現在3.1.3を実行している)されて、私はほとんどすべてのコントローラと、次のエラーが表示されます。ここでは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)."

は、このエラーが発生方法の一例です次のよう

/** 
* 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

アップグレード後にキャッシュをクリアしましたか?リクエストは適切に名前空間になっていますか?おそらくあなたの質問を経路定義で更新してください。問題の原因となるのは、キャッシュのクリアだけです。 – 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 7.1とsymfony 3.1の両方を使用している場合にのみ持続します。 私はdev環境とprod環境の両方を試していたので、キャッシュを何度も空にして、これをDigital Ocean Ubuntuの小滴とMacBook Proに再現することができました。

これが真のバグか、この問題の原因となっているコードに何かがあるかどうかは不明です。

私はこの問題をより明確な原因が見つかったら、これを更新します。

0

編集:

私は最終的に(私にとっては)問題の原因を発見した:

use Symfony\Component\HttpFoundation\Request; 

(代わりに大文字の小文字):にタイプミスがありました。奇妙なこと:symfony/PHPのすべてのバージョン(Sf-2.6とPHP-5.4)で何年も働いていましたが、最近Sf/PHPのバージョンで問題になっています。この動作は、「反射型の改善」によるものだと思われ

:...

前答え

PHPの名前空間は、大文字と小文字を区別しないですが、symfonyのリゾルバは時々、大文字と小文字を区別しているようです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でもこの問題があります。 –

関連する問題