Как наследовать функцию от контроллера расширения в ООП Symfony

Я хотел бы знать, возможно ли это в объектно-ориентированном программировании на php. У меня есть контроллер

class BaseController extends Controller{

   /**
   * @Route("/sample", name = "sample")
   */
   public function postSampleAction(Request $request){

   }
}

и у меня есть файл под названием ProductEvent и PriceEvent

class ProductEvent extends BaseController{

   public function checkEvent(){
      echo "product event";
   }
}

class PriceEvent extends BaseController{

       public function checkEvent(){
          echo "price event";
       }
    }

как видите, я расширяю BaseController. Я хочу, чтобы мне нужно было поместить checkEvent() в BaseController в postSampleActioin().

class BaseController extends Controller{

       /**
       * @Route("/sample", name = "sample")
       */
       public function postSampleAction(Request $request){
         $this->checkEvent();
       }
    }

Я не знаю, правильный ли это способ. Я хочу проверить, будет ли это повторять функцию checkEvent().

Извините моя ошибка. Забыл добавить, какой фреймворк я использовал. Я использовал для этого symfony.

Это невозможно. Наследование просто идет в одном направлении. вам нужно будет реализовать эту функцию в вашем Basecontroller, и она будет доступна в ваших дочерних классах.

wayneOS 10.04.2018 09:48

Лучше реализовать функцию checkEvent() в родительском классе. Тогда дочерние классы могут легко переопределить.

Rotimi 10.04.2018 09:51

Каковы ваши точные требования? Ваш подход не поддерживает ваше требование.

Dipanwita Kundu 10.04.2018 09:53

все, что я просто хочу, это повторить функцию checkEvent () в BaseConroller, когда маршрут вызывает postSampleAction (). Я уже добавляю функцию checkEvent в родительский элемент, но ничего эха.

user3818576 10.04.2018 09:55

Вы спрашиваете, возможно ли это или это хороший способ сделать это? Потому что тестирование должен был дать вам результат довольно легко ...

yivi 10.04.2018 20:08

@yivi спасибо за ссылку. Да, я спрашиваю, возможно ли это, но, похоже, это работает только в одном направлении.

user3818576 11.04.2018 04:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
120
1

Ответы 1

Это означает, что вы хотите сделать BaseController классом неполный, абстрактный, который необходимо унаследовать и реализовать там метод checkEvent:

abstract class BaseController extends Controller {
   public function postSampleAction(Request $request) {
       $this->checkEvent();
   }

   abstract public function checkEvent();
}

Теперь вы не можете создать экземпляр BaseController отдельно, и любой наследующий неабстрактный класс должен реализовывать checkEvent; это дает вам требуемую безопасность типа, которая позволяет вам полагаться на checkEvent в postSampleAction.

Прошу прощения за мою большую ошибку. Я думал, что проблема в ООП. Забыл добавить, какой фреймворк использовал. Это применимо, но путь Symfony не работает. Снова извините. :(

user3818576 10.04.2018 10:17

Другие вопросы по теме