Defaultcontroller
の中にshowUsersAction()
メソッドがあります。これは、リストからユーザーを選択できるようにする必要があります。submit
ユーザの項目が表示されているルート/showItems/{userId}
にリダイレクトされます。エラー:SymfonyコンポーネントフォームのChoiceTypeを使用して非オブジェクトのメンバー関数を呼び出す
私はリンクして簡単ですが、私はChoiceType
を利用したいことをやることが可能であろうことを知っている:
まず、私は最小限の変更でSymfony documentationからChoiceType
の例をコピーします
/**
* @Route("/showUsers", name="showUsers")
*/
public function showUsersAction(){
$users = $this->getDoctrine()->getManager()->getRepository('AppBundle:User')->findAll();
$form = $this->createFormBuilder()
->setMethod('POST')
->add('user', ChoiceType::class, [
'choices' => $users,
'choice_label' => function($user) {
/** @var User $user */
return strtoupper($user->getUsername());//here is the problem
},
'choice_attr' => function($user) {
return ['class' => 'user_'.strtolower($user->getUsername())];
},
])
->getForm();
return $this->render('default/showUsers.html.twig',
array('users' => $users, 'form' => $form->createView()));
}
$users
は、クラスUser
のオブジェクトを持つ配列を返します。私はブラウザにルートを実行すると、私は次のようなエラーメッセージが出ます:?
Error: Call to a member function getUsername() on a non-object
in src\AppBundle\Controller\DefaultController.php at line 50
ライン50を問題であり、どのように私は解決することができますどのようなコメント行return strtoupper($user->getUsername());
- ですか
- また、送信ボタンをクリックして同じルートに送信した後、選択したユーザーを取得するにはどうすればよいですか?
EDIT:$user
symfonyのドキュメントに関連するべきではない非オブジェクトであるためもちろん (ための可能な重複のは)私は、この方法getUsername()
を呼び出すことはできませんことを知っています。だから私の質問は、エラーが同じである他の100の問題とはまったく関係のないSymfonyの特別な解決策に関するものです。
[参考 - PHPでこのエラーは何を意味しますか?](http:// stackove rflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) –
あなたの$コールバック関数の中に$ userが含まれているかどうか調べてみましたか? $ usersが実際にオブジェクトの配列だった場合、あなたのコードはドキュメントに従って動作するはずです – georaldc
コールバック関数の中で定義されていなければ '$ user'と思います。 if文を追加すると、 'if($ user){...}'というエラーが2.コールバック関数に現れます。しかし、なぜ?それは、私が「選択肢」をどのように追加するかで、何かをするのか? – goulashsoup