1

table_method可以使用该选项更改用于管理员生成器配置中的列表操作的查询。例如,

# apps/backend/modules/job/config/generator.yml
config:
  list:
    table_method: retrieveBackendJobList

但我想限制管理生成器中的所有操作。特别是,我想将所有显示、编辑、删除等对象限制为具有特定属性的对象,该属性可能取决于一周中的当前日期或一天中的时间。

我不想覆盖模型类,因为对于其他应用程序,我希望限制不同(或者可能根本没有限制)。

在哪里(即,哪个文件)以及如何进行此更改?

4

2 回答 2

1

可能通过 table_method 和 generator.yml 功能来添加和删除您已经处理过的自定义索引(即列表)操作的操作按钮。

对于其他操作,您可能希望在模型中为这些自定义查询创建其他方法。但是覆盖默认行为的地方是模块的 actions.class.php 文件。

因此,在您的示例中,您将编辑 apps/backend/modules/job/actions/actions.class.php 文件并为您需要更改的每个操作编写自定义代码。

因此,例如,您可以像这样更改删除行为:

# apps/backend/modules/job/actions/actions.class.php
require_once dirname(__FILE__).'/../lib/jobGeneratorConfiguration.class.php';
require_once dirname(__FILE__).'/../lib/jobGeneratorHelper.class.php';

class jobActions extends autoJobActions
{ 
  /**
   * Override standard delete action.
   * @param sfWebRequest $request A request object
   */
  public function executeDelete(sfWebRequest $request) {
    if ($some_custom_condition) {
      $job = Doctrine_Core::getTable('job')->find($request->getParameter('id'));
      $job->delete();
      $this->getUser()->setFlash('notice', 'Record deleted.');
      return sfView::SUCCESS;
    } else {
      $this->getUser()->setFlash('error', 'You do not have permission to do that.');
      return sfView::ERROR;
    }
  }
}
于 2011-05-10T18:21:22.160 回答
1

为此使用路由。这将确保所有操作都具有一种对象查询方法。

job:
  class: sfDoctrineRouteCollection
  options:
    model: Job
    module: job
    with_wildcard_routes: true
    model_methods:
      object: getActiveJob

class JobTable extends Doctrine_Table
{
  public function getActiveObject($params)
  {
    $q = $this->createQuery('j')
      ->where('j.id = ?', $params['id'])
      ->addWhere('j.is_active = ?', true)
    ;

    return $q->fetchOne();
  }
}

在您的自定义操作中,使用 $this->getRouting()->getObject() 来使用此方法。

于 2011-05-10T22:34:44.933 回答