2016-12-18 2 views
0

フォームを作成するクラスの中でメソッドを呼び出す必要があります。しかし、私はこのエラーが発生します。フォームを作成しているときにnullのメンバー関数get()を呼び出す

Error: Call to a member function get() on null 

これはフォーム操作を処理するクラスです。

class CommentController extends Controller 
{ 
    public function replyAction() 
    { 
     $comment = new Comments(); 

     $form = $this->createFormBuilder($comment) 
     ->add('name', TextType::class) 
     ->add('text', TextType::class) 
     ->add('reply', SubmitType::class, array(
      'label' => 'Reply')) 
     ->getForm(); 

     return $this->$form; 
    } 
} 

と、これは私はそれが私がクラスにreplyActionコードを配置した場合、私はからそれを呼び出していますが、私は別の内部でそれを持ちたいという働き

$form = (new CommentController())->replyAction(); 

別のクラスからメソッドを呼び出す方法ですクラス。

+0

本当にあなたには関係ないと思いますが、確信しています...あなたのformBuilderはあなたのコントローラにありますか?もしそうなら、なぜですか? – Preciel

+1

コントローラを次のように別のクラスから呼び出す場合は、サービスとして定義してください。http://stackoverflow.com/questions/31366074/how-exactly-can-i-define-a-controller-as- service-using-annotations –

+1

formTypeクラスを作成します。http://symfony.com/doc/current/forms.html#creating-form-classes –

答えて

1

実際の質問に答えるには、コンテナと呼ばれるものがコントローラに注入されていないためにエラーが表示されます。理論的には、次のように修正することができます:

// SomeOtherClass 
$commentController = new CommentController(); 
$commentController->setContainer($container); 
$form = $commentController->replyAction(); // Assuming replyAction has 'return $form;' 

もちろん、SomeOtherClassはコンテナにアクセスすることも、アクセスしないこともあります。

もちろん、本当にこのようなことをしようとしているのはなぜですか?かなり率直に言って、それはあまり意味がありません。開発者がコントローラをサービスとミックスすることは珍しくありません。

あなたのやりたいことの説明で質問を更新することを検討してください。おそらくサービスを介してフォームを作成しますか?

関連する問題