【问题标题】:Codeigniter Routing with HMVC not working使用 HMVC 的 Codeigniter 路由不起作用
【发布时间】:2015-02-21 08:00:34
【问题描述】:

我正在使用带有 HMVC 的 Codeigniter,我有一个名称与模块名称不同的子控制器


- modules
      - manage
        - controllers
          - manage.php
        - views
          - dashboard.php

      - properties
         - controllers
            - properties.php
            - manage.php
         - views
            - properties.php
            - manage.php
      - projects 
        - controllers
          - projects.php
          - manage.php
        - views
          - projects.php
          - manage.php

如果网址是这样的(仅索引有效)

sitename.com/manage/proprties

这工作正常,但如果我传递了一些参数,(错误 404) sitename.com/manage/properties/add

sitename.com/manage/properties/edit/10

我的路由是这样的

$route['manage/(:any)']                     ="$1/manage";
$route['manage/(:any)/(:any)']              ="$1/manage/$2";
$route['manage/(:any)/(:any)/(:num)']       ="$1/manage/$2/$3";

如何使 URL sitename.com/manage/properties/edit/10 工作?

【问题讨论】:

    标签: codeigniter routing hmvc codeigniter-hmvc


    【解决方案1】:

    在路线上你错了。取决于您的 codeigniter 版本。

    https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

    示例:

    $route['default_controller'] =" folder/controller/index"; // Only works codeigniter 2 so far codeigniter 3 will not allow is bug in codeigniter 3
    
    $route['name'] =" folder/controller/index"; // Example
    
    $route['manage'] =" manage/manage/index";
    
    $route['manage/add'] =" manage/manage/add"; 
    
    $route['manage/update/(:any)'] =" manage/manage/update/$1"; // (:any) sbsu2783
    $route['manage/update/(:num)'] =" manage/manage/update/$1"; // (:num) 2783
    $route['manage/update/(:any)/(:any)'] =" manage/manage/update/$1/$2"; // Just example
    
    $route['manage/delete'] =" manage/manage/delete";
    
    $route['manage/(:any)'] =" manage/manage/index/$1/$2"; // Not need most of the time
    

    sitename.com/manage/edit/10

    您可能需要包含 index.php,或者不确定您是否已配置 htaccess。

    例如在控制器site_url('manage/update') .'/'. $this->uri->segment(4);

    【讨论】:

    • 我的 Codeigniter 版本是 2.1.3 ,根据你的建议,我必须为每个方法添加路由,这是你的意思吗?
    • 是的,您需要为每个控制器设置路由,有时您不需要更新 $route['name'] =" folder/controller/function"; 是您应该使用从 codeigniter.com 下载的 2.2.1 的一般方式
    • 但是我需要构建一种自动路由模块的方法,许多开发人员使用我的项目构建模块......这个问题还有其他解决方案吗?
    【解决方案2】:

    如果您使用 HMVC,则内部控制器的调用功能不需要任何路由。只需正确配置即可。

    第二。您的模块和控制器的名称都相同。所以当 你打电话 localhost/manage 默认情况下会将其重定向到 ma​​nage/manage/index 但当您调用时 localhost/manage/update 它会尝试查找名为 update 的控制器。所以像这样打电话 本地主机/管理/管理/更新

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2012-01-05
      • 1970-01-01
      • 2011-11-07
      • 2018-06-27
      相关资源
      最近更新 更多