我在 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