Codeigniter несколько контроллеров против многих методов? - PullRequest
2 голосов
/ 30 августа 2011

У меня есть сайт, на котором много страниц, лежащих в корне (например, /contact, /about, /home, /faq, /privacy, /tos и т. Д.).Мой вопрос заключается в том, должны ли они быть отдельными контроллерами или одним контроллером со многими методами (например, contact, about, index в main.php контроллере)?

ОБНОВЛЕНИЕ: Я только что понял, что методыкоторые находятся в контроллере по умолчанию, не отображаются в URL без контроллера по умолчанию (т. е. main/contact не будет автоматически маршрутизироваться на /contact, если main является контроллером по умолчанию).Таким образом, вам нужно будет перейти на маршруты и переопределить каждый page.

Ответы [ 5 ]

4 голосов
/ 30 августа 2011

Если все это только страницы, я бы рекомендовал поместить их в один контроллер. Я обычно заканчиваю тем, что помещаю статические страницы, подобные этой, в контроллер 'pages' и добавляю маршруты для каждой статической страницы, чтобы обойти '/ pages' в моих URL.

2 голосов
/ 30 августа 2011

в приложении / config / rout.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
    }    
    }

Надеюсь, это работает для вас

2 голосов
/ 30 августа 2011

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

   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 a view)

Посмотрите в моем примере, как все функциииспользуя ту же функцию getContentFromModel, чтобы использовать те же функции.

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

1 голос
/ 31 октября 2011

Я написал сообщение в блоге об организации методов контроллера CodeIgniter, которые могут быть вам полезны. Проверьте это здесь: http://caseyflynn.com/2011/10/26/codeigniter-php-framework-how-to-organize-controllers-to-achieve-dry-principles/

1 голос
/ 30 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...