【问题标题】:Retrieving related data in the Symfony Admin Generator在 Symfony Admin Generator 中检索相关数据
【发布时间】:2011-01-14 12:26:21
【问题描述】:

我的管理生成器有问题。页表有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"

但是为什么呢?

【问题讨论】:

    标签: symfony1 admin generator


    【解决方案1】:

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

    但是当你只指定salt 时,生成器会查找simplePages 是否有这样的属性。管理员生成器不知道您的意思是sfGuardUsersalt 字段(应该怎么做?)。


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

    display:      [=title, sfGuardUser, _salt, views, state, privacy, created_at, updated_at]
    

    _salt 的输出由 文件 modules/<your_module_name_here>/templates/_salt.php 确定。

    在此文件中,您可以通过以模型类名称命名的变量(在您的情况下为$simple_page$simplePage)访问当前对象

    所以你可以将以下代码放入_salt.php

    <?php echo $simple_page->getGuardUser()->getSalt(); ?>
    

    我不确定getGuardUser() 方法,但我猜您知道如何从您的页面模型访问关联用户。

    【讨论】:

      【解决方案2】:

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

      您的 sfGuardUser 字段正确显示的原因是,当 Doctrine 被告知两个对象相关时,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, ...]
      

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-07
        相关资源
        最近更新 更多