根据url更改CodeIgniter控制器目录


Change CodeIgniter controllers directory depending on url

我是CodeIgniter的新手,我必须在子域上创建一个移动网站。根据您是否是移动用户,唯一需要加载的不同内容是controllers目录,应用程序文件夹的所有其余部分都适用于这两个版本。如何告诉CodeIgniter根据某些参数为特定的controllers目录充电?

或者这不是用CodeIgniter管理基于子域的移动网站的最佳方式吗?我想访问相同的自定义库和模型。

谢谢你引导我,我迷路了!:)

我建议不要创建多个控制器目录。控制器逻辑很可能与您站点的大部分内容相同。当移动版和桌面版出现分歧时,您可以在控制器中创建单独的功能。

首先,我建议让所有控制器都继承自自定义控制器。请参阅Phil Sturgeon关于保持干燥的帖子。一旦实现了这一点,您就可以在这个自定义的"母"控制器中检查请求是来自移动还是桌面,所有子控制器都会知道这一点。使用CodeIgniter的原生$this->agent->is_mobile():

class MY_Controller extends CI_Controller{
    function __construct(){
        parent::__construct();
        $this->data['agent'] = ($this->agent->is_mobile())? 'mobile' : 'desktop';
        $this->load->vars($this->data);
    }
}

改变的是你的演示文稿,而不是你的控制者。既然您知道了请求的来源(代理),就可以呈现适当的内容:

views目录中创建两个目录。

views
    desktop
    mobile

当调用您的观点时:

$this->load->view($this->data['agent'] . "/theview");

关于您在评论中提到的ajax请求,您可以使用CodeIgniter的原生$this->input->is_ajax_request()函数来检查这些请求。当用户点击你网站上的链接或按钮,控制器被启动时,无论是在移动设备上还是在桌面上,他们通常都会共享类似的功能(例如数据库写入)。。。但是您可以使用is_ajax_request()函数来发散并提供适合平台的响应。

建议查看我对另一个关于视图结构的StackOverflow问题的回答,以了解更多信息。

希望这能有所帮助。

你会想看看路由来做你想做的事情。我真的不确定你为什么想要不同的控制器,因为我认为你显示的数据对每个页面都是一样的(移动和非移动)-只是布局会改变,以更好地适应移动平台。如果是这种情况,你只需要在收集/处理控制器中的所有数据后加载一个不同的视图(分别为移动/桌面视图),具体取决于用户代理-你甚至不需要不同的子域,更不用说另一组控制器了这是MVC的强大之处。