关于php:在不同应用程序之间共享CI模型

Share CI models between different applications

我仍在尝试找到一种使移动网站运行的方法。我在CodeIgniter中有一个Web应用程序,我想为其创建一个移动版本。但是,我不想重写太多的代码,尤其是我的模型。.(因为它们返回的原始数据可以在任何地方使用。)

我想在子域(m.mydomain.tld)上运行我的移动网站。桌面版本在www.mydomain.tld上运行。我尝试将子域指向我的CI应用程序文件夹。当移动浏览器到达www.mydomain.tld时,我将其重定向到m.mydomain.tld。正如我所说,此子域指向我的CI应用程序文件夹;然后,我提供针对移动设备优化的控制器和视图。

但是!如app/config/config.php中所指定,我的应用程序的base_url为:

$config['base_url'] = 'http://www.mydomain.tld/';

因此重定向到m.mydomain.tld并不会真正起作用,因为我仍然会重定向到www并且我不想要它,即使它可以执行我想要的操作。

我要解决的方法是制作两个具有不同控制器/视图但共享模型等的应用程序文件夹。因此,我试图找出一种重组CodeIgniter应用程序的方法,以便我可以共享我的模型和"自定义控制器"(MY_Controller),以及不同应用程序之间的一些自定义库/帮助程序。

我希望这很清楚,如果不能的话,我会很乐意解释更多我想要的东西。非常感谢!


也许您应该看看codeIgniter的2.0新功能:包。

软件包允许您与:

共享库,模型等

1
$this->load->add_package_path('/usr/local/codeigniter/shared');

阅读:
http://philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules

希望有帮助。


在config.php中,将$config['base_url'] = 'http://www.mydomain.tld/';替换为:

1
2
3
4
5
6
if(isset($_SERVER['HTTPS']) and 'on' === $_SERVER['HTTPS']) {
    $config['base_url'] = 'https://';
} else {
    $config['base_url'] = 'http://';
}
$config['base_url'] .= $_SERVER['SERVER_NAME'] . '/';

这将从Apache /服务器环境变量获取URL,因此,如果您通过子域访问站点,则它将使用子域URL,或者如果您通过根域访问它,则将使用根域。

我不是CI专家,所以也许还有其他方法,但这是我所知道的最简单的解决方案。


我认为解决此问题的正确方法是在现有Web应用程序中创建一组新的控制器和视图(面向移动设备)。然后只需为新的" mobile "控制器定义路由(也许您还应该为每个路由添加" m / "或" mobile / "前缀),仅此而已。

更新:

好的,我明白了。我建议您这样做:

  • 首先在config.php中创建此记录:

    1
    $config["mobile_base_url"] ="http://m.yoursite.tld/";
  • 然后创建您的url_helper,添加一个mobile_site_url()函数,该函数将类似于CI site_url()函数(在视图和控制器中的链接中将需要此函数)。

  • 创建移动视图和控制器,并使用" m / "前缀为其定义路线。

  • 对此论坛页面http://www.webmasterworld.com/apache/3509887.htm中所述的网址重写进行一些.htaccess hack,以便所有对m.yoursite.tld / ...的请求都将转到yoursite.tld / m / ...

  • 我想您会在这种方法中遇到一些问题,但是绝对不能为您的问题创建单独的CI应用。

    希望这会有所帮助。