使用Phalcon自带的dev工具中的modules模式建立项目,会自动为我们建立一个基础的namespace结构,但不易于理解。
本文是一个纯手工定义namespace的例子:
首先,我们要先在Phalcon框架中注册命名空间,打开参数文件:
app/loader.php
在其中添加一下代码:
$loader->registerNamespaces(
array(
"Book\\Controllers" => APP_PATH ."/controllers/"
)
);
这段代码的意思是,我们注册namespace“Book\Controllers" 并指向路径"app/controllers/"。
然后,我们要把controller加入到这个namespace,这里以IndexController为例子:
<?php
namespace Book\Controllers;
class IndexController extends ControllerBase
{
public function indexAction()
{
}
public function showAllAction(){
$res = $this->db->book->find();
foreach ($res as $doc){
echo $doc->title."|".$doc->nb_store."<br/>";
}
}
public function searchAction(){
$title = $_GET["title"];
$doc = $this->db->book->findOne(
['title' => new \MongoDB\BSON\Regex('.*'.$title.'.*', 'i')]
);
echo $doc['title']."|".$doc['nb_store'];
}
}
这是一个非常简单的controller,标红的地方是加入namespace的代码,我写了两个主要的action,其中,showAll是一个不带GET参数的action,search是一个带参数的action。
因为修改了命名空间,所以我们还需要告知router怎么去找到注册在命名空间里的class
打开Router文件:
/config/router.php
在其中添加如下代码:
$router->add(
//不带参数的action指向命名空间,例如showAll和index
"/:controller/:action",
array(
"namespace" => "Book\\Controllers",
"controller" => 1,
"action" => 2
)
);
//带参数的action指向命名空间,例如IndexController的search
$router->add(
"/:controller/:action/:params",
array(
"namespace" => "Book\\Controllers",
"controller" => 1,
"action" => 2,
"params" => 3
)
);
//控制器的默认路径指向命名空间
$router->add(
"/:controller",
array(
"namespace" => "Book\\Controllers",
"controller" => 1,
"action" => "index"
)
);
//服务器默认路径指向命名空间
$router->add(
"/",
array(
"namespace" => "Book\\Controllers",
"controller" => "Index",
"action" => "index"
)
);
关于定义router的规则,请参考官方文档,这里不再赘述:
http://www.myleftstudio.com/reference/routing.html
当然,也可以看看笔者写的一个简单例子,更适合初学者:
https://blog.csdn.net/u012560213/article/details/79804331
到这里,namespace的定义就结束了。
可以去尝试访问route.php中定义的url,或者在项目中尝试访问定义好的命名空间。