Расширение моего собственного контроллера в Symfony

Я создаю веб-приложение, которое имеет некоторые общие функции. Поэтому я решил, что самый простой способ сделать это — создать базовый контроллер и просто расширить его. Итак, в базовом контроллере у меня есть (аналогично):

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, что контроллер администратора безопасен или что-то?

0

Решение

Это не имеет ничего общего с Symfony, это PHP.

Очевидно, вы пытаетесь переопределить dosomething метод в вашем Admin Controller, и пытается сделать этот метод частным.

Это не разрешено. Это может быть либо protected или же public,

Это принцип ООП. Потому что если у вас будет класс SubAdminController, то экземпляр этого будет также экземпляром обоих AdminController а также BaseController, И PHP обязательно должен знать, если метод dosomething из родительского класса доступен из SubAdminController,

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector