在Symfony中扩展我自己的控制器

时间:2016-10-13 06:09:13

标签: php symfony controller extends access

我正在创建一个具有一些常用功能的webapp。所以我认为最简单的方法是创建一个基本控制器并扩展它。所以在基本控制器中我有(类似):

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class BaseController extends Controller
{
    protected function dosomething($data)
    {
        return $data;
    }
}

然后在默认控制器中:

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends BaseController
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction()
    {
        $data = "OK";
        $thedata = $this->dosomething($data);
    }
}

然后为管理员控制器:     命名空间AppBundle \ Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class AdminController extends BaseController
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction()
    {
        $data = "OK";
        $thedata = $this->dosomething($data);
    }
}

然而,我收到错误,例如"编译错误:AppBundle \ Controller \ AdminController :: dosomething()的访问级别必须受到保护(如AppBundle \ Controller \ BaseController类)或更弱"就在我加载管理控制器功能时,但也是默认的。当我停止管理控制器扩展基本控制器时,会出现此错误(似乎在默认情况下工作但不是管理员)。

我在某个地方猜测我必须让Symfony知道管理员控制器是安全的还是什么?

1 个答案:

答案 0 :(得分:4)

它与Symfony无关,它是PHP。

显然,您正在尝试重新定义管理控制器中的dosomething方法,并尝试将此方法设为私有。

不允许这样做。它可以是protectedpublic

OOP的原则。因为如果你有一个类SubAdminController,那么它的实例也将是AdminControllerBaseController的实例。 PHP必须知道来自父类的方法dosomething是否可以从SubAdminController访问。