2013-11-15 1 views
1

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

Мне было интересно, есть ли какой-либо способ, и в частности любое соглашение, для управления очень большими контроллерами? Есть ли способ разделить контроллер на более простые в управлении разделы?

Я вижу, что есть класс CAction. Это путь? Как насчет методов, которые не являются действиями?

+0

Я здесь, чтобы узнать, как я могу избежать этого. Очевидно, я понимаю, что это проблема, или я не стал бы задавать вопрос. Я чувствую, что CAction (размещение действий в отдельных файлах) может быть подходящим способом, но я надеюсь, что люди могут понять, почему эта проблема имеет тенденцию возникать в первую очередь и в том случае, когда этот курс действий уместен или нет. Благодарим вас за абсолютно неконструктивный комментарий. – raphaeltm

+0

Кроме того, хотя вы удалили тег mvc, я бы сказал, что это актуально, потому что, хотя я прошу совета по конкретным средам, я думаю, что мне было бы полезно (и любые другие) узнать, как можно разделить контроллер в несколько файлов и почему он может быть или не быть уместным. (в том числе, почему проблема не возникает и что может привести к ее возникновению) – raphaeltm

+2

Ваш вопрос сводится к следующему: «Мой класс слишком длинный, что делать?». Причина, по которой занятия слишком велики, заключается в том, что они нарушают некоторые из принципов SOLID (скорее всего - [SRP] (http://en.wikipedia.org/wiki/Single_responsibility_principle)). И если «контроллер» имеет слишком много обязанностей, то он не является контроллером (потому что в контроллерах MVC несут ответственность за изменение состояния уровня модели и представления ... вот и все). Таким образом, вопрос не имеет ничего общего с MVC. –

ответ

-1

Возможно, ваш контроллер раздулся, потому что он делает то, что нужно отправить модели? Контролеры должны действовать как полицейские. Они отвечают на запрос, собирают необходимые данные (из разных моделей), а затем отправляют эти данные в представление. Может быть, ваш контролер выполняет некоторые действия, которые должна выполнять ваша модель (ы)?

+0

Это в основном то, что делает этот контроллер. Я начинаю думать, что я должен был организовать что-то по-другому ... Тяжелые части контроллера просто обрабатывают множество пользовательских вводных данных, чтобы сохранить модель, которая может содержать одну из 4 связанных моделей. Честно говоря, соответствующая модель также велика. – raphaeltm

+0

Я думаю, что раздувание исходит из того, что связанные модели также сохраняются в этом контроллере. Есть ли способ разбить это? – raphaeltm

+0

Emm ... @Gary. Какое интересное определение «контроллера» у вас есть. Не могли бы вы добавить некоторые ссылки, потому что я уверен, что это совершенно неверно **. –

0

Я думаю, вы должны прочитать эту ссылку http://www.yiiframework.com/doc/guide/1.1/en/basics.best-practices, чтобы улучшить свою структуру с помощью MVC. Кроме того, если вы хотите, чтобы ваш контроллер был простым, вы можете использовать CAction. От http://www.yiiframework.com/doc/api/1.1/CAction:

CAction дает возможность разделить сложный контроллер на более мелкие действия в отдельных файлах классов.

Чтобы сделать вашу модель стройной, вы можете использовать Behaviors от Yii.

Смежные вопросы