为Code Igniter中的每个模块分离控制器

时间:2015-12-28 03:19:45

标签: php codeigniter

P.S这个问题可能已经存在,但答案并不能满足我的想法。我在新项目中第一次使用代码点火器。

所以我只有一个控制器是main.php并且填充了很多公共功能。现在,每当我去main.php时,网址看起来都像cmms/main,每次我去它的子类时它都会cmms/main/asset

现在子类资产有很多函数在main.php中。我想要的是为每个模块制作单独的控制器。所以我有cmms/main作为main.php& cmms/asset为asset.php而不是cmms/main/asset。这可能吗?或者我应该不管它并继续将所有代码放在main.php控制器中? 我的默认路由是主控制器。

$route['default_controller'] = 'main';

3 个答案:

答案 0 :(得分:1)

您可以通过以下方式为班级创建模块,

  1. 通过在应用程序控制器目录下创建单独的类,例如:main.php,assets.php,此处您的URL将为cmms / main或cmms / asset
  2. 在应用程序控制器目录下创建子文件夹并在其下创建控制器类main / main.php,asset / asset.php这里的URL将是cmms / main / main,cmms / asset / asset,如果你只想cmms / URL中的main或cmms / assets比您在route.php文件中创建路由所需的数量少。
  3. 通过这种方式,您可以使codeigniter Modular以这种方式使每个模块在其自己的模块目录中具有单独的控制器,模型和视图甚至库,并且URL将与每个控制器的cmms / main或cmms / asset相同。你需要在这里安装wiredesignz的HMVC扩展名是你可以下载的网址https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview
  4.   

    重要的是请阅读HMVC扩展的文档以便使用它。

答案 1 :(得分:1)

你有两种方法可以做到这一点。

  1. 保留一个控制器,但URL不同。 ( 方法01
  2. 为每个新功能保留新控制器。 ( 方法02
  3. (这些主题在下面描述)

    方法01

    转到 - config/routes.php,然后添加这样的新路线

    $route['cmms/asset'] = 'cmms/main/asset';
    $route['cmms/contact'] = 'cmms/main/contact';
    

    所以在视图中你应该像这样调用锚标签

    <a href= "<?php echo base_url() ?>cmms/asset">Assets</a>
    <a href= "<?php echo base_url() ?>cmms/contact">Contact Us</a>
    

    方法02

    为每种新方法创建新的控制器。

    文件名 - main.php

    if (!defined('BASEPATH'))
        exit('No direct script access allowed');
    
    class Main extends CI_Controller {
    
    }
    

    文件名 - asset.php

    if (!defined('BASEPATH'))
        exit('No direct script access allowed');
    
    class Asset extends CI_Controller {
    
    }
    

    文件名 - contact.php

    if (!defined('BASEPATH'))
        exit('No direct script access allowed');
    
    class Contact extends CI_Controller {
    
    }
    

    所以在视图中你应该像这样调用锚标签

    <a href= "<?php echo base_url() ?>asset">Assets</a>
    <a href= "<?php echo base_url() ?>contact">Contact Us</a>
    

答案 2 :(得分:0)

似乎你每次都在编写长网址时遇到麻烦......

因此,更好的方法是轻松使用路线。 例如:$ route ['login'] =“main / login”;

现在,如果您直接在url中使用登录,它将调用主类及其登录方法

使用路线可以防止暴露您的控制器名称,也可以缩短URl