コントローラーでコードを再利用したいので、サービスを作成しました。コントローラー内でメソッドを使用すると機能しましたが、メソッドが別のコントローラーで使用されている場合は機能しませんでした。
function testAction()
{
$em = $this->getDoctrine()->getEntityManager();
$product = $em->getRepository('AcmeStoreBundle:Product')->findAll();
}
このコードが別のコントローラーで使用されている場合、このコードは機能しないため、サービスを作成しました
services:
test:
class: Acme\BlogBundle\Controller\ClockController
arguments:
entityManager: "@doctrine.orm.entity_manager"
そして、これを testAction メソッドでコントローラーに追加します
use Symfony\Component\DependencyInjection\ContainerAware;
use Doctrine\ORM\EntityManager;
これにより、このエラーが発生しました
Call to a member function has() on a non-object in /var/www/Acme/vendor/symfony
/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 191
コントローラーメソッドをこれに変更すると
$em = $this->container->get('doctrine.orm.entity_manager');
私は得る
Call to a member function get() on a non-object in..
これは $em = $this.... へのリコールです。
サービスでドクトリンを適切に使用する方法
編集:解決しました