Symfony1 限制symfony admin generator中可用于所有操作的对象
您可以使用Symfony1 限制symfony admin generator中可用于所有操作的对象,symfony1,admin-generator,Symfony1,Admin Generator,您可以使用table\u方法选项更改管理生成器配置中用于列表操作的查询。比如说, # apps/backend/modules/job/config/generator.yml config: list: table_method: retrieveBackendJobList 但是我想限制管理生成器中的所有操作。特别是,我想将所有显示、编辑、删除等对象限制为具有特定属性的对象,这些属性可能取决于一周中的当前日期或一天中的时间 我不想覆盖model类,因为对于其他应用,我希望限制不
table\u方法
选项更改管理生成器配置中用于列表操作的查询。比如说,
# apps/backend/modules/job/config/generator.yml
config:
list:
table_method: retrieveBackendJobList
但是我想限制管理生成器中的所有操作。特别是,我想将所有显示、编辑、删除等对象限制为具有特定属性的对象,这些属性可能取决于一周中的当前日期或一天中的时间
我不想覆盖model类,因为对于其他应用,我希望限制不同(或者可能根本没有限制)
在哪里(即,哪些文件)以及如何进行此更改 可能通过table_方法和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;
}
}
}
使用路由。这将确保所有操作都有一个对象查询方法
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()来使用此方法