phalcon setschema cs革基在

你的位置: &
& Phalcon 多模块开发的两种方法
Phalcon 多模块开发的两种方法
来个小广告, 上线,希望喜欢C语言框架的朋友多去发发文章和问题。新站,目标就一个想补全 C 框架资料不全的问题。
phalcon 安装问题出现 " php_pdo_get_dbh_ce " ,我已经发在社区了,请;
为什么是两种方法呢?因为一种是个人意淫,一种是官方给的。好不多说下边是介绍,主要是代码。
The First Way
第一种是个人意淫的方法,先注册命名空间,然后,添加 Route 规则,让他根据 ROUTE 规则来加载,代码如下:
//注册命名空间
$Loader = new Loader();
$Loader-&registerNamespaces(
'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',
'namespace'
=& 'Admin\Controllers',
'controller' =& 1,
$Router-&add(
'/admin/:controller/:action/:params',
'namespace'
=& 'Admin\Controllers',
'controller' =& 1,
这样,当我们访问 http://{host}/admin/index/index 或者 http://{host}/admin/index/index/任意参数 就按照 Admin\Controllers 走了,其它的都按照 Home 方向走。
The Anthor Way
这种方法是官方给的,如果你看过 Phalcon 的源代码了,对这方面会很了解。直接看管方文档可能不太好了解。
官方给的实例代码
// 注册模块
$application-&registerModules(
'frontend' =& array(
'className' =& 'Multiple\Frontend\Module',
=& '../apps/frontend/Module.php',
'className' =& 'Multiple\Backend\Module',
=& '../apps/backend/Module.php',
打开 apps/backend/Module.php 看下代码,其中主要代码如下:
* 注册指定模块的加载文件
public function registerAutoloaders()
$loader = new Loader();
$loader-&registerNamespaces(
'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");
//Registering the view component
$di-&set('view', function() {
$view = new View();
$view-&setViewsDir('../apps/backend/views/');
其中,我们如果看 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 你也可以根据需求自己多定制几个,我这就是一个演示,如果有问题可以留言或者加入我们的社区
转载请注明来自,本文标题:
与本文相关的文章Phalcon View 多个渲染级别之间的关系 - 推酷
Phalcon View 多个渲染级别之间的关系
Phalcon 有多种渲染级别,他们的嵌套关系,简单来说就是这张图:
我们必须在外层视图文件中调用
&?php echo $this-&getContent(); ?&
的方法,使他们能够嵌套起来。如果是 volt 引擎的话,可以使用
{{ content() }}
,它经过 volt 编译后和前面的方法是一样的。
那为什么使用 getContent() 方法呢,我们先看一下源码中它的作用是什么
* Externally sets the view content
$this-&view-&setContent(&&h1&hello&/h1&&);
public function setContent(string content) -& &View&
let this-&_content =
* Returns cached output from another view stage
public function getContent() -& string
return this-&_
而 $this-&_content 是在什么时候被赋值的,我们需要了解 Phalcon 整个 view 层的渲染原理和过程:
我们可以通过
$this-&view-&setRenderLevel(View::LEVEL_MAIN_LAYOUT);
的方法选择渲染级别。
LEVEL_NO_RENDER
表明要避免产生任何形式的显示
LEVEL_ACTION_VIEW
生成显示到视图关联的动作
LEVEL_BEFORE_TEMPLATE
生成显示到控制器模板布局之前
LEVEL_LAYOUT
生成显示到控制器布局
LEVEL_AFTER_TEMPLATE
生成显示到控制器模板布局后
LEVEL_MAIN_LAYOUT
生成显示到主布局
我们可以在 controller 的 initialize() 方法中,使用下面的方法来指定 Level_After_Template 和 Level_Before_Template 对应的文件。
$this-&view-&setTemplateBefore('before');
$this-&view-&setTemplateAfter('after');
以渲染 testController helloAction 为例,它们的目录结构应该是这样
其中,views 根目录下的 index.phtml 是主布局文件。
layouts 文件夹下的三个文件分别对应,Level_After_Template、Level_Before_Template、Level_Layout。
test 文件夹是对应 testController 下每一个 action 的视图,hello 就是 testController 下 helloAction 对应的视图。
Level_Main_Layout 默认是 index.phtml 或 index.volt,后缀取决去你的模板渲染引擎,而且这个文件必须是视图文件夹的根目录下。我们可以可以通过
setMainView()
的方法指定为 views 根目录下的其他文件。
下面是有关的部分源码。
protected _mainView = &index&;
* Sets default view name.
* Must be a file without extension in the views directory
//Renders as main view views-dir/base.phtml
$this-&view-&setMainView('base');
public function setMainView(string viewPath) -& &View&
let this-&_mainView = viewP
* Returns the name of the main view
public function getMainView() -& string
return this-&_mainV
关于 view 的渲染原理和过程,参考我的另一篇博文:
更多细节参考官网文档:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 cs的基本观念有 的文章

 

随机推荐