Phalcon学习笔记(3)目录结构与命名约定

来源:互联网 发布:西门子编程软件step7 编辑:程序博客网 时间:2024/05/29 03:46

Phalcon本身对目录结构并没有一定的要求,这是因为可以在依赖注入器和加载器中设置不同的目录结构,不过和一般的MVC框架类似,Phalcon还是推荐大家使用一定规范的目录结构——哪怕是用户自己的习惯结构也好过没有结构。


比如在Phalcon的tutorial中有一个典型的目录结构

tutorial/ .htaccess app/    controllers/    models/    views/  public/    css/    img/    js/    index.php
在项目的根目录下有.htaccess文件,用以开启http服务器的URL rewrite。通过这个重写配置,将用户请求的URL指向public目录下的index.php文件,并以这个文件作为整个项目的入口。


理论上讲,只要能找到index.php入口文件,其他的文件怎么放都可以。不过一般来讲还是把和网站安全无关的文件放在public目录下,比如css、js、图片等。而与网站安全相关的文件,也就是php文件一般放在app目录下,这些php文件还要分为M/V/C几类。


默认情况下Phalcon加载器会把命名为xxxController.php的文件识别为控制器,笔者这里用了小写的xxx,实际上Phalcon官方推荐使用驼峰命名法,即便xxx中有多个大写字母也没关系,有下划线或者其他什么标识也没关系,只要主文件名以Controller结尾即可。类名与文件名要一致,如果一个文件中包含不只一个类,那么只有和文件名相同的类会被识别,另外一个可以被其他类手动调用,但却不能被Phalcon自动调用。


在Controller控制器类中,凡是被命名为xxxAction()的public函数都会被识别为Action功能。


凡是被识别为Controller和Action的,都可以通过URL访问,具体的访问规则在DI中通过router制定,比如DI中url和router定义为

$di->set('url', function () {            $url = new Phalcon\Mvc\Url();            $url->setBaseUri('/myfoler/');            return $url;        });$di->set('router', function () {            $router = new \Phalcon\Mvc\Router();            $router->add("/:module/:controller/:action/:params", array(                'module' => 1,                'controller' => 2,                'action' => 3,                'params' => 4,            ));

那么当用户访问

http://localhost/myfolder/entrance/admin/login

时myfoler被视为项目安装目录,entrance被视为module模块,admin被视为Controller控制器,login被视为Action。程序就会访问entranc模块下的AdminController.php文件中的AdminController类下面的loginAction()函数


xxxController.php文件中可以包含不只一个类,主类中也可以包含除了xxxAction()以外的其他函数,而且还可以是非public的。


实际上只有控制器和行为需要使用URL访问,是用户能够直接感受到的。而在Model模型和View视图中也有命名约定,这些约定是为了Phalcon自己在调用时用的。


一般Model类都放在models目录下,但是这不是必须的,放在哪里都行,只要在加载器中注册即可。一个Model类对应数据库的一张表,Model的类名如果和表名一致,那就可以自动识别。不过我们都知道因为各种各样的原因,数据库中的表名可能和Phalcon的驼峰习惯不一致,这个时候如果还要强行要求Model类名和表名一致就会很奇怪,Phalcon提供了一种妥协方案,就是getSource()函数。把表名通过getSource()函数传递给Model类,就可以让类名和表名不同了。


<?phpclass Users extends \Phalcon\Mvc\Model {    public $id; //interger unsigned    public $username; //string 32    public $password; //string 40    public $active; //char 1    public function getSource() {        return 'users';    }}

至于View的命名则要复杂一些,因为实际上每个视图对应的不是一个控制器,也不是一张表,而是一个完整的URL,也就是说视图的种类最多。在DI依赖注入器中设置好视图的目录(见Phalcon学习笔记(2)DI依赖注入器和加载器)之后,Phalcon会按照这样的规则去识别视图文件。


首先在视图目录下会有子目录,每个子目录的命名必须要和Controller的命名一致,如果是xxxController.php,那么对应的视图目录名是xxx,如果是yyyController.php,那么对应的目录名是yyy。


然后每个子目录里会有不同的视图文件,每个文件对应不同的Action,比如aaaAction()对应的视图文件是aaa.html,bbbAction()对应的视图文件是bbb.html,对于Action可能会传入的参数,并没有对应的视图文件,这需要在程序中处理,一般来讲都会在视图文件中嵌入一些代码来专门处理传入的参数。


这只是视图最简单的命名约定,实际上还要包含layout和index视图,这两个视图的详细内容会另外撰文。另外视图文件也不一定非得是html,也可以使模板文件或者其它什么可以识别的文件,这需要在DI中注册模板解析引擎以读取这些文件。


至于public目录下的css、js之类的文件,Phalcon并没有提供默认路径,不过用户可以自定义常量来实现对应的功能。

0 0