【发布时间】:2020-07-08 06:01:57
【问题描述】:
我正在创建一个具有一些常用功能的 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 知道管理控制器是安全的还是什么?
【问题讨论】:
-
请添加
AdminController的代码。目前它只是DefaultController。但除此之外,错误信息非常清楚。看来你在AdminController上有dosomething作为private。 -
扩展 Symfony 的控制器类只是摆脱大量样板代码的一种简单方法,任何可调用对象基本上都可以处理请求。请不要扩展控制器,而是将
doSomething的服务定义为公共方法并从控制器调用。 -
它最终成为我错过的 AdminController 中的一些代码(已经很晚了,我很累)。问题解决了。
标签: php symfony controller