我对[{1}}并不熟悉,所以我打开参数.yml和config.yml文件,看看如何在YAML
中使用参数或变量的示例。
parameters.yml:
YAML
config.yml:
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: 3306
database_name: homlist
但是当我尝试使用doctrine映射yaml文件时,就像这样:
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
这样的错误:
执行' SELECT计数时发生异常(DISTINCT%0_.id)AS sclr0 FROM%table_name %% 0 _':
这是我的映射文件parameters:
table_name: test
Mockizart\Bundle\BlogBundle\Entity\MockblogTag:
type: entity
table: "%table_name%"
Resources\Config\Entity\MockblogTag
如何在yaml symfony2中定义变量?
答案 0 :(得分:1)
定义参数的方法是正确的,但是我从评论中看到你的目的是配置用于User对象的类:
正如塞拉德所说,你无法做到这一点。但是,如果要配置用于用户的类,则可以使用管理器服务类。
<?php
namespace YourNamespace\UserBundle\Manager;
use Doctrine\Common\Persistence\ObjectManager;
class UserManager
{
/**
* @var ObjectManager
*/
protected $em;
/**
* Your user class
*
* @var string
*/
protected $className;
public function __construct(ObjectManager $em, $class)
{
$this->em = $em;
$this->className = $class;
}
public function createInstance()
{
return new $this->className;
}
public function getRepository()
{
return $this->em->getRepository($this->className);
}
}
服务定义如下:
services:
your_user.manager:
class: YourNamespace\UserBundle\Manager\UserManager
arguments: ['@doctrine.orm.entity_manager', 'YourNamespace\UserBundle\Entity\User']
在您的控制器中,您可以使用此管理器类:
$userManager = $this->get('your_user.manager');
$user = $userManager->createInstance();
我认为这是处理用户对象时有一个中心点的好方法。如果某天由于某种原因您决定为用户使用不同的类,您只需修改参数&#39; YourNamespace \ UserBundle \ Entity \ User&#39;。
同样通过这种方式,您可以使用&#39; YourNamespace \ UserBundle \ Entity \ User&#39;参数作为参数,因此定义将更改为:
services:
your_user.manager:
class: Moneytablet\UserBundle\Manager\UserManager
arguments: ['@doctrine.orm.entity_manager', '%user_class%']
并在你的parameters.yml中你可以:
parameters:
user_class: YouNamespace\UserBundle\Entity\User
我非常喜欢这样工作,你可以在manager类上创建save(),remove()方法,等等。稍后在创建新服务时,如果它是一个依赖项,您可以像常规服务一样注入该管理器。
如果您想要一个不同实体的新管理器,您可以使用不同的构造参数创建一个新的服务定义,但具有相同的服务类。