【问题标题】:Share CI models between different applications在不同应用程序之间共享 CI 模型
【发布时间】:2011-08-24 02:47:39
【问题描述】:

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

我想在子域 (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),以及不同应用程序之间的一些自定义库/助手。

我希望这很清楚,如果不是,我很乐意解释更多我在寻找什么。非常感谢!

【问题讨论】:

  • 为您的移动版本的模型添加另一个视图,而不是创建一个全新的应用程序。我从未使用过 CI,但这是作为 agavi.org 软件包的一部分提供的,毕竟这是 MVC 架构的全部要点。
  • 更新我的问题,为什么我认为这是不可能的。谢谢!
  • 哦,我看到了你的问题。您需要使您的配置文件对您的应用程序所在的位置敏感。

标签: php model-view-controller codeigniter mobile codeigniter-2


【解决方案1】:

也许你应该看看codeIgniter的2.0新特性:包。

包允许您与以下人员共享库、模型等:

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

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

希望对你有帮助。

【讨论】:

  • 谢谢。我会确保检查出来,说实话没听说过。听起来这可能是我需要的。
【解决方案2】:

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

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

这将从 Apache/server 环境变量中获取 URL,因此如果您通过子域访问该站点,那么它将使用子域 URL,或者如果您通过根域访问它,它将使用根域。

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

【讨论】:

  • 这实际上是最新的 CI 版本所做的(最终)猜测未设置的基本 url。 (虽然略有不同)
【解决方案3】:

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

更新:

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

  1. 首先在config.php中创建这条记录:

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

  3. 创建移动视图和控制器,为它们定义带有“m/”前缀的路由。

  4. 对本论坛页面 http://www.webmasterworld.com/apache/3509887.htm 中描述的 url 重写做一些 .htaccess hack,这样所有对 m.yoursite.tld/... 的请求都会转到 yoursite.tld/m/...

我猜你会遇到这种方法的一些问题,但你绝对不应该为你的问题创建单独的 CI 应用程序。

希望这会有所帮助。

【讨论】:

  • 你不应该需要一套全新的控制器,只需要新的视图。控制器只需添加一个附加方法,以便移动设备指向正确的视图。再说一次,我不知道 CI 是否真的是 MVC。
  • 我同意你的看法。我建议创建控制器以防移动视图中不需要某些数据,因此创建优化的控制器将减少模型的负载。
  • 更新了我的问题。感谢您的回复。
  • 我不认为 CI 不是 MVC,它只是不关心你如何编码。如果您的开发人员通常不使用 MVC,那么您的 CI 代码最终不会看起来像 MVC。
猜你喜欢
  • 2011-05-07
  • 2012-06-02
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2018-02-07
相关资源
最近更新 更多