CodeIgniter:在控制器中查找方法,如果没有,请查看默认控制器

时间:2016-08-17 20:19:17

标签: php codeigniter

我在同一台服务器上为三个不同的客户端运行相同的应用程序(在CodeIgniter中制作)。

应用程序大致相同,但每个客户端都有自己的修改(以及它自己的子域),但是现在任何时候我必须进行一般修改我必须通过所有三个客户端的应用程序并执行修改

我想要的是:

该应用仅部署一次,如果你去

,则会进行某种控制

client1.example.com/method1

应用程序在控制器client1.php中查找method1,如果找到method1,则会加载它,否则,在控制器default.php中查找method1

这样,我可以为所有客户端从同一个源加载一般方法,然后使用特定方法为每个客户端加载特定控制器。

P.S。方法基本相同,但客户的不同需求需要能够对每个方法进行大的修改。

任何帮助都将不胜感激。

修改

好的,让我试着说清楚。

在wiredesignz Modular Extensions - HMVC中,当您调用index.php / welcome时,它会在默认控制器中查找它。当你加载一个模块并调用index.php / welcome时,它首先在模块目录中查找它,如果找不到,将默认为默认控制器。

如果没有模块功能,我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

好吧......如果我解释你的问题。

假设我有这样的URL(主页是我的默认控制器)

http://stackoverflow.com/home/method_1 # Exist in my controller 
http://stackoverflow.com/home/method_2 # Exist in my controller 
http://stackoverflow.com/home/method_3 # NOT in my controller  <--------- 
http://stackoverflow.com/home/method_4 # Exist in my controller 

在上面的链接中,第3个URL不存在。

有了你的问题我得到了一个问题。 如果URL不存在,用户如何访问链接?除非你定义它,否则没有人知道你的网址。用户不会在浏览器中输入网址。好吧将继续。

因此,我得到的更好的解决方案是,如果页面不存在,我们称之为404覆盖。因此,您可以在404_override

中使用Codeigniter routes.php
http://stackoverflow.com/home/method_1 # Valid URL
http://stackoverflow.com/home/method_2 # Valid URL
http://stackoverflow.com/home/method_3 # 404 ERROR <---------
http://stackoverflow.com/home/method_4 # Valid URL

application/config/routes.php

$route['404_override'] = ''; # set this to your home controller

答案 1 :(得分:0)

class defaultcontroller
{
    protected function method1()
    {
        //default.php
    }
}



class client1 extends defaultcontroller
{
    public function method1()
    {
        //client1.php
        //if this method existed,it will be executed
        //or the same method in defaultcontroller will be excuted
    }
}

你可以在client2.php和client3.php中做同样的事情