Symfony1 基于架构填充symfony管理生成器的选择字段
我继承了symfony 1.4应用程序的开发,尽管这是我的第一个symfony项目 在那个应用程序上挖掘了一点之后,我发现了一个让我发疯的bug 在模块的“管理生成器列表”页面上,筛选表单中有两个选择字段,每个字段应列出一种类型的用户、合作伙伴和客户端,但这两个列表都显示所有用户 generator.yml显示两个select字段都应该由parter_id和client_id填充 从模块的模式来看,很明显为什么symfony会用相同的内容填充select字段,因为客户端id和合作伙伴id的关系是等效的:Symfony1 基于架构填充symfony管理生成器的选择字段,symfony1,doctrine,symfony-1.4,Symfony1,Doctrine,Symfony 1.4,我继承了symfony 1.4应用程序的开发,尽管这是我的第一个symfony项目 在那个应用程序上挖掘了一点之后,我发现了一个让我发疯的bug 在模块的“管理生成器列表”页面上,筛选表单中有两个选择字段,每个字段应列出一种类型的用户、合作伙伴和客户端,但这两个列表都显示所有用户 generator.yml显示两个select字段都应该由parter_id和client_id填充 从模块的模式来看,很明显为什么symfony会用相同的内容填充select字段,因为客户端id和合作伙伴id的关系是
SomeModule:
tableName: client_requests
columns:
id: {type: integer, primary: true, autoincrement: true}
partner_id: {type: integer, notnull: true}
client_id: {type: integer, notnull: true}
date: {type: timestamp}
...
relations:
partner:
class: sfGuardUser
local: partner_id
foreign: id
type: one
client:
class: sfGuardUser
local: client_id
foreign: id
type: one
根据上述模式,symfony别无选择,只能生成以下选择字段:
select * from sf_guard_user;
合作伙伴和客户之间的差异由sfGuardGroup和sfGuardUserGroup决定,来自./plugins/sfDoctrineGuardPlugin/config/doctor/schema.yml的架构的相关部分包括:
我想使用以下查询生成这些字段:
select u.*
from sf_guard_user as u
JOIN (sf_guard_user_group as ug JOIN sf_guard_group as g
ON (ug.group_id = g.id)) ON (u.id = ug.user_id)
where g.name = 'partner';
我已经研究了一种方法来编辑模块的模式,以反映客户id和合作伙伴id与其组名之间的关系,从而获得正确的筛选表单选择字段,但我最终认为这是一种错误的方法
?是否可以修改模块的模式以允许symfony正确填充选择字段
或者这种方法是完全错误的,我应该破解呈现这些字段的方法,用正确的查询填充它们?如果是这样的话,我们将不胜感激
谢谢只需编辑您的表单并将查询添加到partner_id小部件。比如:
$query = Doctrine::getTable('sfGuardUser')->createQuery('u')->etc etc...
$this->widgetSchema['partner_id']->setOption('query', $query)
您可能需要对该字段的验证器执行相同的操作:
$this->validatorSchema['partner_id']->setOption('query', $query)
如果您无法编辑该特定表单,则可能该表单已用于应用程序的其他部分,只需创建一个新表单来扩展它即可。然后,您只需要在generator.yml文件中指定form类
$query = Doctrine::getTable('sfGuardUser')->createQuery('u')->etc etc...
$this->widgetSchema['partner_id']->setOption('query', $query)
$this->validatorSchema['partner_id']->setOption('query', $query)