kohana路由roule与模块modules的关系init.php(默认加载模块hmvc)

如何让框架直接进入某个模块呢?
有时开发不在应用application中进行MVC操作,而是以模块modules化hmvc进行操作。

打开目录直接路由roule到admin模块方法:
设置默认配置文件application/bootstrap.php
默认写法:

$modules = array(
'administrator' => MODPATH.'administrator',
'user' => MODPATH.'user',
'pagination' => MODPATH.'pagination',
'cache' => MODPATH.'cache', // Caching with multiple backends
'xcache' => MODPATH.'xcache', // Xcache Extension Of Cache
'database' => MODPATH.'database', // Database access
'image' => MODPATH.'image', // Image manipulation
'orm' => MODPATH.'orm', // Object Relationship Mapping
'admin' => MODPATH.'admin',
//'admin1' => MODPATH.'admin1',
'codetest' => MODPATH.'codetest',
'auth' => MODPATH.'auth', // Basic authentication
'core' => MODPATH.'core',
'email' => MODPATH.'email',
);



扩展后写法(不同域名载入不同模块):

//Admin后台管理模块

enable_module('admin',array('administrator','pagination','admin','database','cache','orm','xcache','database','auth','core','email','codetest'));
enable_module('device',array('administrator','pagination','admin','database','cache','orm','xcache','database','auth','core','email','codetest'));

foreach($module_array as $k=>$v)
{
$modules_load[$v] = $modules[$v];
}

function enable_module($domain,$modules)
{
global $module_array;

//这里是为了判断不同的前缀域名加载不同的模块用的
//if (strpos($_SERVER['HTTP_HOST'], $domain) !== FALSE)
//{
$module_array = $modules;
//}
}
Kohana::modules($modules_load);


//Route::set('default', '(<controller>(/<action>(/<id>)))')
// ->defaults(array(
'controller' => 'index',
'action' => 'index',
// ));
//

注意这里的模块加载顺序,先是加载admin模块。而且默认的route路由我们把它注释了(这是直接路由至application中mvc)。
所以,当访问站点时,系统会直接加载模块中第1个modules,即admin模块,然后读取模块中的init.php配置信息。
admin/init.php配置我们可以这样写:

<?php defined('SYSPATH') or die('No direct script access.');

// Catch-all route for Admin classes to run
Route::set('admin', 'admin(/<directory>(/<controller>(/<action>(/<id>))))',array('id'=>'.*'))
->defaults(array(
'controller' => 'main',
'action' => 'index',
'directory' => 'dashboard',
));

Route::set('default', '(<controller>(/<action>))')
->defaults(array(
'controller' => 'main',
'action' => 'index',
'directory' => 'dashboard',
));

仔细看。
因为我们是直接访问的站点,如http://localhost/
这时会加载到admin/init.php该文件,因为是根目录未加'admin'路由名,所以route会使用默认的名字'default'
即第二个默认路由

再仔细看。
Route::set('default', '(<controller>(/<action>))')
->defaults(array(
'controller' => 'main', //默认会直接加载admin/main控制器,即admin/main.php
'action' => 'index', //默认方法名
'directory' => 'dashboard',//这里有默认目录,因为设置了这里,所以会去加载默认的
dashboard目录
));

进入 dashboard 目录后加载默认控制器 main,即main.php 名,然后根据里面的业务逻辑进入处理即可。
例如我们可以这样写:

class Controller_Dashboard_Main extends Controller_Admin{
function action_index()
{
$this->template = View::factory("dashboard/main");
}

加载默认main视图
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值