前提介绍
- 来个小广告,www.weiduyun.com 上线,希望喜欢C语言框架的朋友多去发发文章和问题。新站,目标就一个想补全 C 框架资料不全的问题。
- phalcon 安装问题出现 " php_pdo_get_dbh_ce " ,我已经发在社区了,请点击这里;
- 为什么是两种方法呢?因为一种是个人意淫,一种是官方给的。好不多说下边是介绍,主要是代码。
The First Way
第一种是个人意淫的方法,先注册命名空间,然后,添加 Route
规则,让他根据 ROUTE 规则来加载,代码如下:
//注册命名空间
$Loader = new Loader();
$Loader->registerNamespaces(
array(
'Admin\Controllers' => BASE_PATH."/app/admin/controllers/",
'Admin\Models' => BASE_PATH."/app/admin/models/",
'Home\Controllers' => BASE_PATH."/app/home/controllers/",
"Home\Models" => BASE_PATH."/app/home/models/"
)
)->register();
$di->set('router',function(){
//注册路由
$Router = new Router();
//添加Admin 命名空间路由
$Router->add(
'/admin/:controller/:action',
array(
'namespace' => 'Admin\Controllers',
'controller' => 1,
'action' => 2,
)
);
$Router->add(
'/admin/:controller/:action/:params',
array(
'namespace' => 'Admin\Controllers',
'controller' => 1,
'action' => 2,
"params" => 3,
)
);
});
这样,当我们访问 http://{host}/admin/index/index
或者 http://{host}/admin/index/index/任意参数
就按照 Admin\Controllers
走了,其它的都按照 Home 方向走。
The Anthor Way
这种方法是官方给的,如果你看过 Phalcon
的源代码了,对这方面会很了解。直接看管方文档可能不太好了解。
- 官方给的实例代码
// 注册模块 $application->registerModules( array( 'frontend' => array( 'className' => 'Multiple\Frontend\Module', 'path' => '../apps/frontend/Module.php', ), 'backend' => array( 'className' => 'Multiple\Backend\Module', 'path' => '../apps/backend/Module.php', ) ) );
apps/backend/Module.php
看下代码,其中主要代码如下:
/**
* 注册指定模块的加载文件
*/
public function registerAutoloaders()
{
$loader = new Loader();
$loader->registerNamespaces(
array(
'Multiple\Backend\Controllers' => '../apps/backend/controllers/',
'Multiple\Backend\Models' => '../apps/backend/models/',
)
);
$loader->register();
}
/**
* 注册指定模块的服务
*/
public function registerServices($di)
{
//Registering a dispatcher
$di->set('dispatcher', function() {
$dispatcher = new Dispatcher();
$dispatcher->setDefaultNamespace("Multiple\Backend\Controllers");
return $dispatcher;
});
//Registering the view component
$di->set('view', function() {
$view = new View();
$view->setViewsDir('../apps/backend/views/');
return $view;
});
}
其中,我们如果看 phalcon/mvc/application.zep
的源代码的 handle()
中就能看到,他会先查找 model
/**
* Gets the module definition
*/
let module = this->getModule(moduleName);
然后在根据模块去注册自动加载和服务
let moduleObject = <ModuleDefinitionInterface> dependencyInjector->get(className);
/**
* 'registerAutoloaders' and 'registerServices' are automatically called
*/
moduleObject->registerAutoloaders(dependencyInjector);
moduleObject->registerServices(dependencyInjector);
URL访问还待自己注册路由,简单点你可以如下代码:
$router = new Phalcon\Mvc\Router(false);
$router->add('/:module/:controller/:action/:params', array(
'module' => 1,
'controller' => 2,
'action' => 3,
'params' => 4
));
其中 model 匹配的就是 Model ,参数是一一对照的,前后顺序可以随意修改,这4个就只能匹配 /model/controller/action/param 你也可以根据需求自己多定制几个,我这就是一个演示,如果有问题可以留言或者加入我们的社区 www.weiduyun.com
发表评论 取消回复