我如何路由到模块?

时间:2013-01-10 19:54:29

标签: php fuelphp

我已经倾注了文档,但我似乎无法找到如何将URI路由到模块。

我的模块目前包含一个使用正确目录结构的控制器(目前有大量空目录)。我的控制器在modules/module_name/classes/controller内,而我的路由文件在modules/module_name/config/routes.php内。

我在/app/config/routes.phpmodules/module_name/config/routes.php中尝试了以下内容:

<?php
return array(
    '_root_'  => 'md5_encrypt/index',  // The default route

    'tools/geek/md5_encrypt' => array('md5_encrypt'),
);

控制器如下所示(但我不认为这是相关的):

<?php

/**
 * MD5 Encrypt Controller.
 *
 * Online tool to encrypt a string using MD5
 * 
 * @package  app
 * @extends  Controller
 */

namespace Md5_encrypt;

class Controller_Md5_Encrypt extends Controller_Template
{

    /**
     * The tool
     * 
     * @access  public
     * @return  Response
     */
    public function action_index()
    {
        $data = array();
        $this->template->tab = 'geek';
        $this->template->title = 'MD5 Encrypt Tool';
        $this->template->content = View::forge('welcome/index', $data);     
    }
}

2 个答案:

答案 0 :(得分:1)

命名空间名称中不能有下划线。控制器名称相同。

自动加载器会在查找文件时将下划线转换为目录分隔符。

答案 1 :(得分:0)

首先,您应该在app / config / config.php

中设置应用程序模块的路径
'module_paths' => array(
    APPPATH.'modules'.DS, // path to application modules
)

在app / config / routes.php中设置第二个路由

'tools/geek/md5_encrypt' => 'md5_encrypt(module_name)/md5_encrypt(controller)',

但是,由于您使用控制器名称class Controller_Md5_Encrypt extends Controller_Template的下划线,因此产生了新路径。

/modules/md5_encrypt/classes/controller/md5/encrypt.php
控制器名称中的

下划线(_)在自动加载期间转换为目录分隔符http://fuelphp.com/docs/general/coding_standards.html#classes

在自动加载过程中找不到您的/modules/md5_encrypt/classes/controller/md5_encrypt.php文件。