PHP Codeigniter多级开关语句

PHP Codeigniter多级开关语句,php,switch-statement,codeigniter-2,Php,Switch Statement,Codeigniter 2,我正在用PHP codeigniter重新构建一个网站,该网站主要包含静态页面和一些散布的动态页面。问题是,页面在导航中有1-5层(例如example.com/about/history/people/person/photos) 我不知道如何在控制器中实现这一点。我现在有一组疯狂的switch语句嵌套在switch语句中。下面是一个简单的例子: class About extends MY_Controller { //**** INDEX page ****

我正在用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 );

}
}

我觉得我处理得不对,感觉很混乱。所以我的问题是:有没有更好(更紧凑/干净/动态)的方法

您有几个选择

  • 您可以将case语句放在单独的函数中。例如,如果您有
    案例“文档”
    ,您可以将其放入一个私有函数中:

    私人职能文件(){ //加载特殊脚本 $this->setTitle(“文档”); $this->setDescription('Document stuff'); $path=‘人员/人员/文档’; }

  • 您可以创建一个包含标题、描述等的关联数组,并检查变量是否已填充。在此之后,您可以使用
    $sub
    变量调用数组


  • 您可以创建一个自定义路由器,允许您在子文件夹中添加控制器(请参阅),例如-在这种情况下,它只允许一个子文件夹,但可以扩展以遍历deeperThank You!这是我绝对可以做到的。