2014-12-01 3 views
1

В настоящее время я использую Symfony2, и я пытаюсь разделить мой код на другой контроллер (например, Ajax Controller, User Controller и т. Д.), Но я не знаю, когда я должен использовать создание нового Один.Symfony2, когда я должен создать новый контроллер?

Например, мой DefaultController начинает быть довольно большим (~ 800 строк), и мне было интересно, может ли слишком длинный контроллер повлиять на производительность веб-сайта? (Более длительное время загрузки ...) И если это произойдет, когда я должен разделить контроллер на более мелкие?

ответ

4

Я бы сказал, что вы должны группировать свои действия, с которыми работают одни и те же данные (объекты) или действовать в пределах четко определенной ответственности. Например. UserController для пользователей, PostController для сообщений в блогах и т. Д. Это означает, что если вы хотите создать действие, роль которого отличается от остальных действий, поместите его в отдельный контроллер.

Symfony кэширует почти все, поэтому я не думаю, что огромные контроллеры могут повлиять на производительность, но если у вас есть контроллер длины в тысячи строк, я не уверен, что он делает только одно.

Размер контроллера может быть предупреждающим знаком также для неуместных запросов и бизнес-логики. Вы должны отбирать вызовы QueryBuilder в классы репозитория и другую логику для служб и обработчиков событий. Вы можете сохранить больше строк, используя аннотации вместо PHP-кода.

1

Я думаю, что это хорошая идея, чтобы начать с контроллера для каждой соответствующей модели с структурой CRUD.

Конечно, это зависит от ваших потребностей, но если у вас есть модель «Почта», вам, вероятно, понадобится PostController с маршрутами и методами CRUD, такими как: index (/ posts), new, update, create, delete. .. В зависимости от того, что вам нужно, вы можете удалить или добавить какой-либо метод относительно сообщения из этой базовой структуры.

Попробуйте определить, что реально относительно конкретной модели в вашем контроллере defaultController и создать для нее контроллер.

Удачи.

1

Что @riska и @Yoann сказали, что все верно.

Кроме того, я предпочитаю не, чтобы создать отдельный контроллер, если я уверен, что он содержит только один метод. В этом случае я просто положил его в DefaultController.

1

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

1.Call the appropriate service 
2.Return the response 

То есть 2 строки кода для каждого действия контроллера, или вы можете даже сделать это в одной строке.

Как указано выше, контроллеры обычно разделены какими типами сущностей/служб, на которых они работают. Если у вас, например, есть сущность - скажем, Пользователь, возможны следующие действия: createAction, editAction, removeAction, registerAction, activateAction, loginAction, logoutAction и т. Д.

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

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