PHP Codeigniter多级切换语句

时间:2014-02-20 20:52:37

标签: 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 ****                    
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 );

}
}

我觉得我接近这个错误,感觉很乱。所以我的问题是:有更好的(更紧凑/清洁/动态)方式吗?

1 个答案:

答案 0 :(得分:0)

您有几个选择。

  1. 您可以将case语句放在单独的函数中。例如。如果您case 'documents',您可以将其置于私人函数中:

    私人职能文件(){        //加载特殊脚本        $这 - >的setTitle( '文件');        $ this-> setDescription('Document stuff');        $ path ='people / person / documents'; }

  2. 您可以在其中创建一个带有标题,描述等的关联数组,并检查变量是否已填充。在此之后,您可以使用$sub vars调用数组。