У меня есть сайт, на котором есть много страниц, которые расположены в корне (например, /contact
, /about
, /home
, /faq
, /privacy
, /tos
и т. Д.). Мой вопрос в том, должны ли эти все быть отдельными контроллерами или одним контроллером со многими методами (например, contact
, about
, index
в контроллере main.php
)?
ОБНОВЛЕНИЕ: Я только понял, что методы, которые находятся в контроллере по умолчанию, не отображаются в URL-адресе без контроллера по умолчанию (т. Е. Main main/contact
будет автоматически маршрутизироваться в /contact
если main является контроллером по умолчанию). Поэтому вам нужно будет идти по маршрутам и переопределять каждую page
.
Если все это только страницы, я бы рекомендовал поместить их в один контроллер. Обычно я помещаю статические страницы, подобные этому, в контроллер «страниц» и помещаю маршруты для каждой статической страницы в обход «/ страниц» в своих URL-адресах.
Если они имеют одну и ту же функциональность, они должны находиться в одном контроллере.
например, если все они используют одну и ту же модель для получения контента, поэтому один контроллер может легко справиться с этим.
Почему в одном контроллере? потому что вы всегда хотите повторно использовать свой код.
class someController{ function cotact(){ print $this->getContentFromModel(1); } function about(){ print $this->getContentFromModel(2); } function home(){ print $this->getContentFromModel(3); } private function getContentFromModel($id){ return $this->someContentModel->getContentById($id); } }
(вместо print
вы должны использовать load view
)
См. В моем примере, как все функции используют одну и ту же функцию getContentFromModel для совместного использования одной и той же функциональности.
но это только один случай, могут быть и те случаи, когда мой пример может быть плохим для …
в приложении / config / routes.php
$route['contact'] = "mainController/contact"; $route['about'] = "mainController/about"; $route['home'] = "mainController/home"; $route['faq'] = "mainController/faq"; $route['privacy'] = "mainController/privacy";
и вы должны добавить все эти методы в mainController.php
Вы также можете сохранить содержимое страниц в своей базе данных и запросить его. Например, вы можете отправить URL-адрес в качестве ключевого слова для определения содержимого страницы
$route['contact'] = "mainController/getContent/contact"; $route['about'] = "mainController/getContent/about"; $route['home'] = "mainController/getContent/home"; $route['faq'] = "mainController/getContent/faq"; $route['privacy'] = "mainController/getContent/privacy";
в этом случае вам нужно создать только один метод с именем «getContent» в контроллере «mainController», и этот метод будет выглядеть примерно так:
class mainController extends CI_Controller { public function getContent($param) { $query = $this->db->get_where('mytable', array('pageName' => $param)); // then get the result and print it in a view } }
Надеюсь, что это работает для вас
Названия страниц, которые вы указали, вероятно, должны быть разными способами внутри вашего основного контроллера. Когда у вас есть другие функции, связанные с другим конкретным сущностью, например с пользователем, вы можете создать другой контроллер для пользовательского объекта и иметь разные методы для отображения пользователя, обновления пользователя, регистрации пользователя. Но все это действительно инструмент для организации вашего приложения таким образом, который имеет смысл для вашего домена и вашей модели домена.
Я написал сообщение в блоге об организации методов контроллера CodeIgniter, которые могут быть полезны для вас. Посмотрите здесь: http://caseyflynn.com/2011/10/26/codeigniter-php-framework-how-to-organize-controllers-to-achieve-dry-principles/