根据url更改CodeIgniter控制器目录

时间:2012-08-06 20:02:57

标签: php codeigniter-2 codeigniter-routing

我是CodeIgniter的新手,我必须建立一个位于子域名的移动网站。根据您是否移动而唯一不同的东西是controllers目录,所有应用程序文件夹的其余部分都适用于这两个版本。如何根据某些参数告诉CodeIgniter对特定controllers目录收费?

或者它可能不是使用CodeIgniter管理基于子域的移动网站的最佳方式?我希望能够访问相同的自定义库和模型。

感谢指导我,我迷路了! :)

2 个答案:

答案 0 :(得分:1)

我建议不要创建多个控制器目录。对于网站的大部分内容,控制器逻辑很可能是相同的。您可以在控制器中创建单独的功能,以便移动和桌面版本发生分歧。

首先,我建议让所有控制器继承自定义控制器。请参阅Keeping It Dry上的Phil Sturgeon的帖子。实施此功能后,您可以在此自定义“母亲”中检查请求是来自移动设备还是桌面设备。控制器和所有后代控制器都会知道它。使用CodeIgniter's native $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's native $this->input->is_ajax_request()函数检查这些请求。当用户单击您站点上的链接或按钮并触发控制器时,无论是在移动设备上还是在桌面上,它们通常都会共享相似的功能(例如,数据库写入)......但您可以使用is_ajax_request()功能来分散和提供适合该平台的响应。

建议在视图结构上查看my answer到另一个StackOverflow问题以获取更多信息。

希望这有帮助。

答案 1 :(得分:0)

您需要查看routing以执行您要执行的操作。我不确定你为什么想要不同的控制器,因为我假设你显示的数据对于每个页面都是相同的(移动与非移动) - 只是布局会改变以更好地适应移动平台。如果是这种情况,您需要做的就是在根据用户代理收集/处理控制器中的所有数据后加载不同的视图(分别是移动/桌面视图) - 您甚至不需要另外的子域更不用说另一组控制器了。 这个是MVC的力量。