我想从SonataAdmin类“configureFormFields()
肯定这不起作用
protected function configureFormFields(FormMapper $formMapper)
{
$mycnx = $this->get('doctrine.dbal.mycnx_connection');
//...
我需要它来扩展Sonata/UserBundle/Admin/Entity/UserAdmin
如何从此课程中拨打电话?
背景信息:
我需要一个选择字段(公司),其选择来自另一个连接(来自存储过程)。
答案 0 :(得分:1)
你要做的是:
为字段提供选择
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
#...
然后您就可以在configureFormFields()
中使用它:
->add('company', 'company')
答案 1 :(得分:1)
实际上,您可以更轻松地使用更少的代码......
<强>配置强>
如果您已经设置了第二个连接doctrine.dbal.mycnx_connection
,那么您的配置看起来有点像这样。
应用程序/配置/ config.yml
doctrine:
dbal:
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mycnx_connection: # credentials for 2nd connection
driver: "pdo_mysql"
host: "%database_host_2%"
port: "%database_port_2%"
dbname: "%database_name_2%"
user: "%database_user_2%"
password: "%database_password_2%"
charset: UTF8
default_connection: default
现在,如果您还没有...配置使用此连接的second entity/document manager:
应用程序/配置/ config.yml
doctrine:
# dbal, ...
orm:
entity_managers:
default:
connection: default
mappings:
AcmeDemoBundle: ~
AcmeStoreBundle: ~
company: # <- setup a second em using the customer connection
connection: customer
mappings:
AcmeCompanyBundle: ~
default_entity_manager: default
......这可能看起来很多,但实际上并非......如果您有第二个dbal连接,那么上面描述的所有内容应该已经存在。
我只是想让别人明白这一点。
您现在有两个可用的服务可以反映您的两个实体经理:
@doctrine.orm.entity_manager.default
(...别名为@doctrine.orm.entity_manager
)@doctrine.orm.entity_manager.company
实体字段类型
现在剩下要做的就是使用entity field-type并将其配置为使用company
连接使用实体管理器。
的Acme / YourBundle /窗体/类型/ YourType.php
use Doctrine\ORM\EntityRepository;
// ...
$builder->add('users', 'entity', array(
'class' => 'AcmeCompanyBundle:Company',
'em' => 'doctrine.orm.entity_manager.company', // <- non-default em here
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('company')
->orderBy('company.name', 'ASC');
},
));
就是这样......虽然你可能仍然想让你的表格成为一种服务......你不必注入任何东西。
您不需要使用EntityRepository $er
中的'query_builder'
部分...如果您不想为公司创建存储库,则可以返回QueryBuilder实例。