Phalcon教程1:让我们先来学习一个例子

在本节教程中,我们将带您创建一个简单的注册表单的应用程序。 我们还将解释框架的行为的基本方面。如果你有对自动生成部分代码感兴趣, 您可以查看 developer tools.

检查您的安装

我们假设你已经安装了Phalcon,您可以利用Phpinfo()函数来进行输出查看是否有phalcon出现?

<?php
print_r(get_loaded_extensions());
?>

如果在下面出现了phalcon扩展的字样,那么说明你安装成功了:

Array([0] => Core[1] => libxml[2] => filter[3] => SPL[4] => standard[5] => phalcon[6] => pdo_mysql)

创建一个项目

学习的最好方法是,您按照本教程的指引一步一步的进行. 您可以从此处获得完整的代码 here.

目录结构

Phalcon 是松耦合的,因此并没有对文件的目录作固定,您可以根据您的需要或喜好,自定义文件目录结构
本教程的目的和出发点, 我们建议您使用以下类似的文件目录结构:

tutorial/app/controllers/models/views/public/css/img/js/

需要注意的是,您不需要包含任何类库到此项目中就可以工作了,因为Phalcon已经当作一个php模块加载进来了. (译者备注)比如您使用ZF或者其他框架的时候,你要么include进来,要么在include_path中加入框架的路径。但Phalcon却不必这 样。

完美漂亮的URL

在本教程中,我们将教你如何做出漂亮的(友好的)网址。友好的URL非常有利于搜索引擎优化,因为它们很容易让用户记住。Phalcon支持最流行的Web服务器的重写。使您的应用程序的URL不完全依赖web server就可以写出很友好的格式。
在这个例子中,我们将使用为Apache重写模块。我们使用.htaccess文件的重写规则:

#/public/.htaccess <IfModule mod_rewrite.c>
    RewriteEngine On     RewriteCond %{REQUEST_FILENAME} !-d     RewriteCond %{REQUEST_FILENAME} !-f     RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] </IfModule>

Bootstrap

第一步,你需要创建一个程序的引导文件,这个文件是非常重要的,因为它作为您的应用程序的基础,让你控制它的各个方面,在这个文件中,你可以实现初始化组件以及应用程序的行为
一般我们会以index.php为引导程序的入口程序,public/index.php 内容大致如下:

<?php try {

    //Register an autoloader
    $loader = new \Phalcon\Loader();
    $loader->registerDirs(array(
        '../app/controllers/',
        '../app/models/'
    ))->register();

    //Create a DI
    $di = new Phalcon\DI\FactoryDefault();

    //Setting up the view component
    $di->set('view', function(){
        $view = new \Phalcon\Mvc\View();
        $view->setViewsDir('../app/views/');
        return $view;
    });

    //Handle the request
    $application = new \Phalcon\Mvc\Application();
    $application->setDI($di);
    echo $application->handle()->getContent();

} catch(\Phalcon\Exception $e) {
     echo "PhalconException: ", $e->getMessage();
}

类的自动加载

在第一部分,我们发现注册了首先定义了一个autoloader,它的作用是用来自动加载应用中的控制类及模型类等。我们用它可以灵活的加载一个目录或者多个目录中的类。在下面的例子中,我们将介绍如何使用PhalconLoader
有了它,我们可以使用不同的策略来加载类库。下面的例子是自动注册控制器类目录及模型类目录:

<?php $loader = new \Phalcon\Loader();
$loader->registerDirs(
    array(
        '../app/controllers/',
        '../app/models/'
    )
)->register();

依赖管理

使用Phalcon,你必须了解它的一个非常重要的概念,那就是他的依赖注入容器。听起来很复杂,但实际使用上它是非常简单和实用的。
译者注:学过或者对JAVA有些了解的人都应该十分熟悉依赖注入的概念,在早期这个概念被称作IOC(控制反转),后期才被称作DI。它们分别是 inversion of control,Dependency Injection的英文缩写。只是DI更能表达其含意,因此后来基本都叫做DI。对这个概念不太懂的人,可以搜索一个这两个英文单词,相信你会有不少收 获。
一个服务容器就相当于一个袋子,用于存储我们应用将要用到的一些服务,每当框架需要一个组件,将要求服务容器首先注册这个服务组件。Phalcon是一个高度松耦合的框架,PhalconDI 将使这些要用到的服务组件透明的结合在一起。

<?php //Create a DI
$di = new Phalcon\DI\FactoryDefault();

Phalcon\DI\FactoryDefault 是PhalconDI的一个默认实现,为了使开发更容易,它注册了大量的服务组件集成到Phalcon。因此,我们不需要再一个一个的注册这些组件,以后直接使用也没有问题。
在接下来的部分,我们将注册一个“view”视图组件,并指定视图文件所在目录,由于视图不同于类文件,它们不能被autoloader自动加载。