PHP: MVC и DRY - PullRequest
       54

PHP: MVC и DRY

0 голосов
/ 07 мая 2010

Вопрос по контроллерам. Может ли контроллер вызывать собственные методы класса внутри действия?

EDIT: Ой, извини. Я имел в виду, что не хочу повторяться. :)

Ответы [ 2 ]

2 голосов
/ 07 мая 2010

Если вы не используете какую-то неясную среду, которая каким-то образом предотвращает это, вы должны иметь возможность вызывать методы из класса / экземпляра, независимо от того, является ли класс / экземпляр контроллером или чем-то еще.

Если вы обнаружите, что пишете код, который необходимо повторно использовать на нескольких контроллерах, вы можете подумать о написании BaseController и перенести общую функциональность в эту единственную или, что еще лучше, разделить общую функциональность на вспомогательные классы, которые затем можно создать и вызвать по запросу, по требованию. По сути, если вам нужно что-то в всех контроллерах, переместите это в BaseController. Если вам это нужно в некоторых контроллерах, сделайте его помощником. Если вам нужен только один конкретный контроллер, держите его там.

0 голосов
/ 07 мая 2010

Почему бы и нет?

Это все зависит от вас, но я действительно не вижу причин, чтобы избегать СУХОЙ (LOL). Смысл MVC в том, чтобы отделить контроллер / модель / представление, ничего больше:)

EDIT: Тем не менее, контроллер может вызывать свои собственные методы внутри действий. Хорошей практикой будет давать имена методов действия, такие как action_something или something_action, и иметь «базовый» контроллер, который вы расширите позже. Как;

Controller
Controller_Application extends Controller
Controller_Layout extends Controller_Application

, где первым будет какая-то «абстракция» (ориентированная на фреймворк), а другие будут заботиться о логике приложения. Так что позже у тебя будет ...

Controller_Forum extends Controller_Layout
Controller_News extends Controller_Layout
Controller_Ajax extends Controller_Application

в зависимости от того, для чего вы хотите использовать определенный контроллер.

Все зависит от вас; Вы можете поместить свои собственные методы в любое место и вызывать их из любого места:)

...