在Symfony Admin Generator中检索相关数据

时间:2010-02-08 19:23:07

标签: symfony1 admin generator

管理员生成器出了问题。页面表格列为sf_guard_user_id。表的其余部分看作行显示中generator.yml的这一部分,

list:
  title: Pages
  display:      [=title, sfGuardUser, views, state, privacy, created_at, updated_at]
  sort:         [created_at, desc]
  fields:
    sfGuardUser: { label: Author }
    created_at:  { label: Published, date_format: dd.MM.y }
    updated_at:  { label: Updated, date_format: dd.MM.y }
  table_method: retrieveUserList

现在已更换sf_guard_user_id并显示用户名。不要误会我的意思,这很好。但是如何从sfGuarsUser关系中获取其他变量?当我只添加盐或其他变量来显示时,我得到了这个,

Unknown record property / related component "salt" on "simplePage"

但为什么?

2 个答案:

答案 0 :(得分:3)

显示用户的名称,因为_toString()类的sfGuardUser返回用户名。我想从simplePagesfGuardUser的相关名称是sfGuardUser

但是当您只指定salt时,生成器会查找simplePages是否具有此类属性。管理员生成器不知道您的意思是salt的{​​{1}}字段(应该怎么做?)。


您可以使用 partial fields 来显示该值。因此,您必须在前面指定下划线字段(sfGuardUser),例如:

_salt

display: [=title, sfGuardUser, _salt, views, state, privacy, created_at, updated_at] 的输出由文件 _salt确定。

在此文件中,您可以通过模型类名称(modules/<your_module_name_here>/templates/_salt.php$simple_page命名)的变量访问当前对象。 / p>

因此,您可以将以下代码放入$simplePage

_salt.php

我不确定<?php echo $simple_page->getGuardUser()->getSalt(); ?> 方法,但我想您知道如何从您的网页模型访问相关用户。

答案 1 :(得分:0)

管理生成器无法使用默认配置深入研究相关的对象属性。

你的sfGuardUser字段正确显示的原因是因为Doctrine在“页面”类中定义了一个getSfGuardUser方法,当它被告知两个对象是相关的并且管理生成器调用该函数来显示其列时(技术上在方法返回的结果'sfGuardUser'对象上调用__toString()方法。

要获取对象的某个相关模型的属性,您可以在页面对象中定义自定义getter:

public function getSfGuardUserSalt() {
  return $this['sfGuardUser']['salt'];
}

然后在您的generator.yml中引用它:

display: [title, sfGuardUser, sfGuardUserSalt, ...]

或创建一个部分来处理自定义渲染:

模块/页/模板/ _sfGuardUser.php:

<?php echo $page['sfGuardUser']['name']; ?><br />
<?php echo $page['sfGuardUser']['salt']; ?>

然后将它包含在您的generator.yml中,并带有前面的下划线:

display: [title, _sfGuardUser, views, ...]