Phalcon手动定义namespace的实践

使用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,或者在项目中尝试访问定义好的命名空间。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值