Вызов контроллера внутри контроллера?

StackOverflow https://stackoverflow.com/questions/1457056

  •  12-09-2019
  •  | 
  •  

Вопрос

Что касается наилучших практик, рекомендуется ли это?У меня есть контроллер комментариев + модель, которую необходимо вызвать в контроллере элементов и профилей.Контроллер комментариев автоматически загружает модель комментариев.

Приемлемо ли вызывать контроллер комментариев непосредственно из элементов и контроллера профиля, или вместо этого "наилучший практический" способ вызвать модель комментариев?

Я спрашиваю, потому что в kohana представление не является одноэлементным классом, поэтому, если бы я вызвал контроллер внутри другого контроллера, я получил бы два представления.С другой стороны, если бы я просто вызвал модель, в контроллере items и profiles был бы дублированный код.

Все вы, эксперты MVC, помогаете!=)

Это было полезно?

Решение

Как правило, я бы предпочел подход "Жирной модели".

Я не уверен, какой код вы действительно боитесь дублировать.

Есть пара способов, которыми вы могли бы это сделать:

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

Второй Способ:- Поймите, что нет никаких причин, по которым ваш взгляд не может напрямую взаимодействовать с вашей моделью.- Напишите вспомогательный инструмент просмотра, который извлекает необходимые данные непосредственно из модели и визуализирует их.

Я предпочитаю второй способ.У некоторых людей возникает проблема с тем, чтобы их слой просмотра взаимодействовал с моделью (только для чтения!), но я не один из них.

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

Если вы используете Kohana 3, вы можете воспользоваться функцией HMVC.Вы можете запускать контроллеры внутри контроллеров.

http://forum.kohanaphp.com/comments.php ?Идентификатор обсуждения=2768

Проверьте приведенную выше ссылку для получения некоторых примеров

Я бы сказал, это зависит от того, что возвращает ваш контроллер.

Если ваш контроллер может возвращать DTO / Models, то, конечно, вызов контроллера - хорошая идея.

Ваш контроллер определяет строгие, документированные и, надеюсь, стабильные точки входа в вашу функциональность.Следовательно, вы можете полностью игнорировать реализацию комментариев или изменять ее по своему усмотрению, при условии, что вы не изменяете сигнатуру метода контроллера.

Однако, если ваш контроллер не может вернуть необработанные данные, то это определенно prolematic, потому что взамен вы получаете html (или другую разметку).Это означает, что вам придется передать этот html-код непосредственно в нужное вам представление или извлечь из него данные.И то, и другое - плохая идея.

Передача необработанного html подразумевает, что если вы измените представление комментариев, отображение комментариев в модуле профиля неизбежно изменится.возможно, это то, чего вы хотите, но я бы предпочел гибкость.

Теперь, если вам нужны данные, вам придется извлечь данные из разметки, возвращенной вашим представлением, что является трудоемким и контрпродуктивным.

Если вы пытаетесь вызвать статический метод, вы можете просто вызвать функцию напрямую.Например:

class Controller_User extends Controller {
    public static function format_user($user){
        return array("data" => $user->getData());
    }
}

class Controller_Foo extends Controller {
    public function action_index(){
        $user = get_user_data_some_how();
        $user_data = Controller_User::format_user($user)
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top