【问题标题】:how can i load controller based on useragent?我如何加载基于用户代理的控制器?
【发布时间】:2017-05-04 11:22:50
【问题描述】:

我有 2 个不同的移动和桌面网站(由于它们之间的差异很大,我无法使其响应,因此无法加载不同的视图),并且它们的网址是相同的。我已经在 Codeigniter 中有移动站点,我需要将其制作为桌面版本。

他们有什么方法可以让我在路由器中加载不同的控制器吗 基于用户代理,或任何其他方式来解决这个问题。

我曾尝试在路由规则之前加载用户代理库,但出现错误。

这是我在 routes.php 中尝试过的:

$this->load->library('user_agent');
$this->load->helper('url');
if ($this->agent->is_mobile())
{
    $device = "";
}
else
{
    $device = "desktop/";
}

错误:

遇到 PHP 错误 严重性:通知 消息:未定义的属性:CI_Router::$load 文件名:config/routes.php 行号:52 回溯: 文件:/var/www/html/abc.com/application/config/routes.php 线路:52 函数:_error_handler 文件:/var/www/html/buzz.in/index.php 线路:315 函数:require_once

【问题讨论】:

  • 代替路由,请尝试使用 BaseController 然后路由请求。
  • 我会说为此使用 codeigniter 挂钩,这样您就可以在加载控制器之前执行检查
  • 感谢大家的帮助。 Hooks 非常适合我。

标签: php codeigniter model-view-controller routes


【解决方案1】:

您可以在检查用户代理后使用_remap() 函数,它会在两种情况下(移动/桌面)保持 URL 相同。

_remap() documentation

或者您可以按照@kishor10d 的说明在 BaseController 中检查它...

【讨论】:

    【解决方案2】:

    你可以像上面那样使用重映射函数,或者使用 baseController,但我会选择 CodeIgniter 钩子。

    接下来我想知道为什么移动设备处理数据的方式与桌面设备不同?以我的经验,我只更改视图,而不是功能,但无论如何检查一下

    https://www.codeigniter.com/user_guide/general/hooks.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多