@hrvasiliy

Как вы реализуете общие функции/методы?

В зависимости от того, на какую страницу заходит пользователь, подключается нужный контроллер и модель. Часто встречается, что в каком-то контроллере уже реализован определенный метод, который, допустим, получает браузер/ос и этот метод вдруг требуется в другом контроллере. Не копировать же этот метод? Стараюсь избежать даже малейшего повторения кода. Пришел к тому, что надо добавить новый, общий контроллер (бывают, кстати и методы общие). Хотел бы узнать, как правильно реализовать общую часть?
  • Вопрос задан
  • 240 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Реализуется через общий абстрактный класс контроллера.

abstract class AbstractController
{
    public function commonMethod() { }
}

class ConcreteControllerA extends AbstractController { }
class ConcreteControllerB extends AbstractController { }


Можно всё это приправить трейтами:
trait ControllerTrait
{
    public function traitMethod() { }
}

/**
 * В этом контроллере будут общие методы абстрактного 
 * класса и методы трейта.
 */
class ConcreteControllerA extends AbstractController 
{ 
    use ControllerTrait;
}

/**
 * А в этом только общие методы абстрактного класса.
 */
class ConcreteControllerB extends AbstractController
{
    
}

Вариант посложнее - плагины контроллеров:
https://github.com/zendframework/zend-mvc/tree/mas...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы