0

我在 Symfony2 中为控制器、EntityRepository 和我的 Doctrine Fixtures 的组合而苦苦挣扎。

我的 ImageParts 实体是图像片段。我想使用随机片段随机生成图像。

因此,我有一个名为 ImagePart 的实体和一个名为“ImagePartRepository”的 EntityRepository。

在该 EntityRepository 中,我创建了一个名为“getRandomImagePart()”的函数,它在使用路由测试时工作正常。

但我不知道如何在我的灯具中使用这个功能。我想我必须声明一项服务,但即便如此我也无法让它工作。我收到的错误消息类型告诉我,我显然在做一些结构错误的事情。

此外,我想知道我是否以正确的方式使用 Symfony2 框架,功能。例如:我应该能够在我的装置中使用 EntityRepository 吗?

控制器:

    <?php

    namespace AMM\AMMBundle\Controller;

    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

    use Symfony\Component\DependencyInjection\ContainerInterface;
    use Symfony\Component\DependencyInjection\ContainerAwareInterface;
    use Symfony\Component\Finder\Finder;

    use AMM\AMMBundle\Entity\ImagePart;
    use Doctrine\ORM\Mapping as ORM;


    class ImagePartController extends Controller implements ContainerAwareInterface
    {
        /**
         * @var ContainerInterface
         */
        protected $container;

        /**
         * {@inheritDoc}
         */
        public function setContainer(ContainerInterface $container = null)
        {
            $this->container = $container;
        }


        public function getRandomImagePartAction($type)
        {
            /*
            $sql = " 
                SELECT a.imagePartBase64 FROM imageparts a
                WHERE a.imagePartCategory = '".$type."'
                ORDER BY RAND()
                LIMIT 1
            ";
            */

            $em = $this->getDoctrine()
                       ->getManager();

            $imagePart = $em->createQueryBuilder()
                        ->select('g')
                        ->from('AMMBundle:ImagePart',  'i')
                        ->addOrderBy('i.id', 'ASC')
                        ->getQuery()
                        ->getSingleResult();

          // $conn = $this->get('database_connection');
            //$randomimagepart = $conn->fetchAll($sql);


           // return $randomimagepart[0]['imagePartBase64'];

            return $imagePart;
        }

// ..

public function generateRandomImage()
    {
      $object->getRandomImagePartAction('BACKGROUND');
    }

夹具文件 ImageFixtures.php

<?php
namespace AMM\AMMBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

use AMM\AMMBundle\Entity\ImagePart;

class GenerateImages implements FixtureInterface, ContainerAwareInterface, OrderedFixtureInterface
{
    private $container;

    public function load(Objectmanager $manager)
    {
        $image= new Image();

        $imageGenerator = $this->container
                               ->get('imageGenerator')
                                ->GenerateRandomImage();

        $manager->persist($image);      
        $manager->flush();

}

我的服务.yml:

services:
    imageGenerator:
        class:        AMM\AMMBundle\Controller\ImagePartController

所以,基本上我所做的就是从同一个控制器中的一个函数中调用一个函数。这在测试它时工作正常,例如在视图中。

但是在尝试加载学说夹具时,会出现以下错误:

致命错误:在 C:\wamp\www\amm\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Controller\Controller.php 中的非对象上调用成员函数 has() 第 198 行

堆栈跟踪的结尾:

5.7077   41983128  15. AMM\AMMBundle\Controller\ImagePartController->getRandomImagePartAction() C:\wamp\www\amm\src\AMM\AMMBundle\Controller\ImagePartController.php:119
5.7077   41983128  16. Symfony\Bundle\FrameworkBundle\Controller\Controller->getDoctrine() C:\wamp\www\amm\src\AMM\AMMBundle\Controller\ImagePartController.php:44
4

1 回答 1

0

好的,我发现了问题。

我必须将此添加到我的 services.yml 中:

calls: - [setContainer, [@service_container]] –
于 2013-04-11T13:20:39.050 回答