在sonata admin中扩展CRUD控制器和PHP严格标准的问题

在sonata admin中扩展CRUD控制器和PHP严格标准的问题,php,symfony,inheritance,sonata-admin,standards-compliance,Php,Symfony,Inheritance,Sonata Admin,Standards Compliance,我正在使用最新的(dev master)sonata admin,我想为sonata admin创建自己的createAction()方法。我必须这样做,因为我想在添加到数据库时保存一些用户信息 我的自定义控制器是-S\CoreBundle\controller\newsadmincroller.php <?php namespace S\CoreBundle\Controller; use Sonata\AdminBundle\Controller\CRUDController as C

我正在使用最新的(dev master)sonata admin,我想为sonata admin创建自己的createAction()方法。我必须这样做,因为我想在添加到数据库时保存一些用户信息

我的自定义控制器是-S\CoreBundle\controller\newsadmincroller.php

<?php
namespace S\CoreBundle\Controller;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
use Symfony\Component\Security\Core\SecurityContextInterface;


class NewsAdminController extends Controller
{
    /**
    * Set the system user ID
    */
    private function updateFields($object)
    {
        //some code - this is my own method
    }

    public function createAction(Request $request = null)
    {
        //code for create ... it's almost the same as default code. 
    }
}
两个createAction()方法都有完全相同的参数,名称

这给我带来了一个错误:


PHP严格标准:S\CoreBundle\Controller\NewsAdminController::createAction()的声明应与Sonata\AdminBundle\Controller\CRUDController::createAction兼容(Symfony\Component\HttpFoundation\Request$Request=NULL)在第129行的/home/mark/dev/project/src/S/CoreBundle/Controller/NewsAdminController.php中
Sonata\AdminBundle\Controller\CRUDController::createAction(Symfony\Component\HttpFoundation\Request$Request=NULL)

需要一个
请求对象
,但如果不声明它,它将指向
S\CoreBundle\Controller\Request

加上
“使用文件顶部的Symfony\Component\HttpFoundation\Request;”

更新 自提交以来,无需将请求设置为参数

创建操作仅限于


Sonata\AdminBundle\Controller\CRUDController::createAction()

能否包含“使用Symfony\Component\HttpFoundation\Request;”在您的控制器中?我同意@YenneInfo-看起来您可能需要为请求添加一个
use
语句-很可能PHP假设它与您的
CRUDController
来自同一名称空间,因此您的函数声明与Sonata one不兼容。谢谢。这就是诀窍。你可以发布答案,我会接受的。这对我不起作用<代码>警告:App\Controller\DenunciaAdminController::createAction(Symfony\Component\HttpFoundation\Request$Request)的声明应与Sonata\AdminBundle\Controller\CRUDController::createAction()兼容,此答案已存在三年,且代码自那时起已更改,你不需要再在参数中设置请求,我会更新我的答案。。。(这是承诺)
class CRUDController extends Controller
{
    public function createAction(Request $request = null)
    {
         //...
    }
}