Операторы многоуровневого переключения PHP Codeigniter

Я перестраиваю веб-сайт с помощью PHP codeigniter, который содержит в основном статические страницы и некоторые динамические страницы с вкраплениями. Проблема в том, что страницы находятся на 1-5 уровнях в глубине навигации (например, example.com/about/history/people/person/photos).

Я не уверен, как реализовать это в контроллере. В настоящее время у меня есть сумасшедший набор операторов switch, вложенных в операторы switch. Вот простой пример:

class About extends MY_Controller 
{
//**** INDEX page ****                    
public function index()
    {
        $this->setTitle('About');
        $this->setDescription('About Stuff');
        $this->loadView('about/index');
    }

 //-------------------------HISTORY section--------------------------------
public function history($sub1 = "", $sub2 = "", $sub3 = "", $sub4 = "")
{
    $path = "";

    switch($sub1){

        //_____ PEOPLE section ____
        case 'people':
            switch($sub2){

                //____ PERSON section ____
                case 'person':
                        switch($sub3){ 

                            //**** PHOTOS page ****
                            case 'photos':
                                $this->setTitle('Photos');
                                $this->setDescription('Photo stuff');
                                $path = 'people/person/photos';
                                break;

                            //**** DOCUMENTS page ****
                            case 'documents':
                                //Load special scripts
                                $this->setTitle('Documents');
                                $this->setDescription('Document stuff');
                                $path = 'people/person/documents';
                                break;

                             //**** INDEX page ****
                             default:
                                $this->setTitle('Person');
                                $this->setDescription('Person stuff');
                                $path = 'people/person/index';
                        }
                        break;

                //**** AnotherPerson page *****
                case 'anotherPerson':
                     //Load database
                     $this->setTitle('AnotherPerson');
                     $this->setDescription('AnotherPerson stuff');
                     $path = 'people/anotherperson';
                     break;

                //**** INDEX page ****
                default:
                    $this->setTitle('People');
                    $this->setDescription('People stuff');
                    $path = 'people/index';

            }
            break;


        //**** INDEX page ****
        default:
            $this->setTitle('History');
            $this->setDescription('History stuff');
            $path = 'index';
    }


            $this->loadView('about/history/' . $path );

}
}

Я чувствую, что подхожу к этому неправильно, и это кажется грязным. Итак, мой вопрос: есть ли лучший (более компактный/чистый/динамичный) способ сделать это?


person lemonaida    schedule 20.02.2014    source источник
comment
Вы можете создать собственный маршрутизатор, который позволит вам добавлять контроллеры в подпапки (см. glennpratama.wordpress.com/2009/10/20/) в качестве примера - в этом случае он разрешает только одну подпапку, но ее можно расширить, чтобы пройти глубже   -  person Sam Dufel    schedule 21.02.2014
comment
Спасибо! Это то, что я мог бы определенно сделать работу.   -  person lemonaida    schedule 21.02.2014


Ответы (1)


У вас есть несколько вариантов.

  1. Вы можете поместить операторы case в отдельную функцию. например. если у вас есть case 'documents', вы можете поместить это в приватную функцию:

    private function document(){ //Загружаем специальные скрипты $this->setTitle('Documents'); $this->setDescription('Документы'); $path = 'люди/человек/документы'; }

  2. Вы можете создать ассоциативный массив с заголовком, описанием и т. д. и проверить, заполнены ли переменные. После этого вы можете вызывать массив с помощью переменных $sub.

person GuyT    schedule 20.02.2014