Symfony2で以下のようなエラーがでた!
1 2 3 4 5 6 7 8 9 10 11 |
Catchable Fatal Error: Argument 1 passed to Acme\RentacarBundle\Service\ReservationService::saveReservation() must be an instance of Acme\RentacarBundle\Enity\Reservation, instance of Acme\RentacarBundle\Entity\Reservation given, called in /home/hogehoge/public_html/rentacar/src/Acme/RentacarBundle/Controller/ReservationController.php on line 191 and defined in /home/hogehoge/public_html/rentacar/src/Acme/RentacarBundle/Service/ReservationService.php line 46 このエラーには何回か遭遇した。 このエラーの意味はそのメソッドが要求しているのとは違う型のものが引数としてわたされてますよ! というもの。 いろいろな原因が想定されるが自分の場合は以下のようなミスがあったので参考に。 1. use文内でのスペルミス これによりオブジェクトが違く見えエラーとなった。 |
1 2 3 4 5 |
// 誤 use Acme\RentacarBundle\Enity\Reservation; //正 use Acme\RentacarBundle\Entity\Reservation; |
2. キャストによる失敗
1 |
Catchable Fatal Error: Argument 1 passed to Acme\RentacarBundle\Form\LoginProxy::__construct() must be an instance of Acme\RentacarBundle\Entity\UserRepository, instance of Doctrine\ORM\EntityRepository given, called in /home/hogehoge/public_html/rentacar/src/Acme/RentacarBundle/Controller/SecurityController.php on line 29 and defined in /home/hogehoge/public_html/rentacar/src/Acme/RentacarBundle/Form/LoginProxy.php line 44 |
この場合は、LoginProxyのコンストラクタは、Acme\RentacarBundle\Entity\UserRepositoryのインスタンスを要求しているがDoctrine\ORM\EntityRepositoryが設定されてるよ?
って言ってきてます。
Userエンティティのリポジトリを取得してそれを引数に入れているのですが、UserエンティティとUserRepositoryが関連づけられていなかったため、
getEntityManager()の結果が”Doctrine\ORM\EntityRepository”のままになっていました。
アノテーションで、Userのリポジトリクラスとして、UserRepositoryを指定すれば型が合うのでエラーがでなくなります。
1 2 3 4 5 |
//誤 * @ORM\Entity 正 // * @ORM\Entity(repositoryClass="Acme\RentacarBundle\Entity\UserRepository") |