Php 在sonata admin上创建批处理操作
我正在尝试在Sonata admin上添加新的批处理操作。但当我在我的项目中实施示例时,它会说: 注意:未定义索引:translation\u domain 如何解决 一些代码片段: AdminClass.phpPhp 在sonata admin上创建批处理操作,php,symfony,sonata-admin,Php,Symfony,Sonata Admin,我正在尝试在Sonata admin上添加新的批处理操作。但当我在我的项目中实施示例时,它会说: 注意:未定义索引:translation\u domain 如何解决 一些代码片段: AdminClass.php <?php use Sonata\AdminBundle\Admin\Admin; class AdminClass extends Admin { //Other variables, functions public function getBatchAct
<?php
use Sonata\AdminBundle\Admin\Admin;
class AdminClass extends Admin {
//Other variables, functions
public function getBatchActions() {
// retrieve the default batch actions (currently only delete)
$actions = parent::getBatchActions();
if (
$this->hasRoute('edit') && $this->isGranted('EDIT') &&
$this->hasRoute('delete') && $this->isGranted('DELETE')
) {
$actions['merge'] = array(
'label' => 'Мэйл илгээх',
'ask_confirmation' => true
);
}
return $actions;
}
/*protected function configureRoutes(RouteCollection $collection) {
$collection->add('sendAction');
$collection->add('send-mail', $this->getRouterIdParameter().'/send-mail');
}*/
}
public function getNewInstance() {
$instance = parent::getNewInstance();
$mailadds = $this->getRequest()->query->get('mails');
foreach ($mailadds as $mailadd) {
$instance->addRecipient($mailadd);
}
return $instance;
}
protected function configureFormFields(FormMapper $formMapper) {
$formMapper
->add('recipients', 'sonata_type_model', array('label' => 'Хүлээн авагчид', 'multiple' => true, 'by_reference' => false)
...
}
AdminClass.php
<?php
use Sonata\AdminBundle\Admin\Admin;
class AdminClass extends Admin {
//Other variables, functions
public function getBatchActions() {
// retrieve the default batch actions (currently only delete)
$actions = parent::getBatchActions();
if (
$this->hasRoute('edit') && $this->isGranted('EDIT') &&
$this->hasRoute('delete') && $this->isGranted('DELETE')
) {
$actions['merge'] = array(
'label' => 'Мэйл илгээх',
'ask_confirmation' => true
);
}
return $actions;
}
/*protected function configureRoutes(RouteCollection $collection) {
$collection->add('sendAction');
$collection->add('send-mail', $this->getRouterIdParameter().'/send-mail');
}*/
}
public function getNewInstance() {
$instance = parent::getNewInstance();
$mailadds = $this->getRequest()->query->get('mails');
foreach ($mailadds as $mailadd) {
$instance->addRecipient($mailadd);
}
return $instance;
}
protected function configureFormFields(FormMapper $formMapper) {
$formMapper
->add('recipients', 'sonata_type_model', array('label' => 'Хүлээн авагчид', 'multiple' => true, 'by_reference' => false)
...
}
注意:收件人是多个字段
根据我的意见,问题应通过第420行的以下代码解决:
$translationDomain = isset($batchActions[$action]['translation_domain']) ? $batchActions[$action]['translation_domain'] : $this->admin->getTranslationDomain();
出现此问题是因为您没有检查数组$batchActions[$action]中是否存在键“translation\u domain”。据我所知,三元运算符“?”尝试将值应用于变量,如果在操作后未设置值,则尝试第二个运算符。因此,为什么我认为isset应该修复它。还要添加一些代码。简单地说-在试图获取“translation_domain”的数组中,该键不存在。在使用isset之前,请检查它。此错误发生在哪一页?尝试将错误处理设置为E_ALL,也许可以创建一个自定义的错误处理程序,您可以使用它获取发生错误的特定文件行。例如:
错误报告(E\u ALL);设置错误处理程序(“错误处理程序”,E_ALL);函数errorHandler($errno,$errstr,$err_file,$err_line,$err_context){echo“Error$errno,errstr-$errstr,err_file-$errfile,err_line-$err_line,context-$err_context);die();}
我发布的代码将打印出所有错误,这可能会让你更靠近。@Janno谢谢你的回答:)错误发生在vendor/sonata project/admin bundle/Controller/CRUDController.php的第420行中
将该行更改为:$translationDomain=isset($batchActions[$action]['translation\u domain'])?$batchActions[$action]['translation\u domain']:$this->admin->getTranslationDomain();