Phalcon学习笔记(1)启动

因为工作需要,最近开始学习php,除了语言自身肯定还要学习类库,翻来覆去找了半天的php框架,最后选择了Phalcon,理由吗,很简单,安装容易,毕竟我不是专业写程序的,写程序只是我工作中用以提高工作效率的工具而已,所以不能说一切从简,但是不能按照计算机科学家的水平来做。因为笔者不是高手,所以文章主要是记录自己的学习之路,更适合初学者,请高手手下留情,勿喷。


Phalcon是一个php的MVC框架,是用C开发的php扩展,所以运行速度比其他php写的框架要快很多,它还自创了一个Zephir的语言,据说可以用php写php扩展,然后像C一样编译,这样运行速度会快,不过笔者没有去深入研究,先用好Phalcon就可以了。目前Phalcon的最新版本是2.0.x


笔者是在Windows下运行开发的,首先安装Apache和php,然后到

https://phalconphp.com/en/download/windows

下载对应的版本,Phalcon只要和php版本匹配即可,注意有3个参数:一个是php版本,只要x.y.z中的x和y对应即可,不必追求z的一致,因为z的升级都是打补丁,不是改功能;第二个是线程安全TS还是非线程安全NTS(Non Thread Safe);其实还应该有一个参数,就是编译器版本,Phalcon用的编译器必须和php用的一致,其实它们官方确实用的是同一个版本的编译器,所以也就不用担心了,只不过在安装Apache和php时要注意,他们俩个也应该一致。


然后在php.ini里面加上


extension=php_phalcon.dll

就可以了


如果是Unix-like系统

https://www.phalconphp.com/en/download

有对应的安装方法


Phalcon的启动方式和其他框架类似,通过对url的重定向,可以把url中的各个段识别为参数,传递给index.php,然后通过index.php这个入口文件来解释这些参数,实现MVC,这种方式也就是俗称的RESTfull API


也就是说,首先需要在http服务器中设置url重定向,Phalcon提供了一个专供Apache的.htaccess文件

AddDefaultCharset UTF-8

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

如果使用其他http服务器,配置会有所不同,具体请参看各服务器的文档

在index.php这个入口文件中,Phalcon推荐使用自带的\Phalcon\Mvc\Application类作为入口,它自带了默认的很多配置,不需要过多的细节就可以顺利启动


首先需要一个加载器Loader,然后为这个载入器注册目录,注册目录里的所有后缀为php的文件都会被其识别,并采用lazy load的方式载入,延迟加载就是只有在需要的时候才生成类的实例,这样可以节省内存开销。自然这些目录里都是Controller类和Model类,也就是MVC中的C和M,V对应的是View,一般不使用类的方式。


然后需要一个依赖注入器DI,依赖注入的概念请自行Google,初学者可以理解为依赖注入器会通过加载器在需要的时候载入lazy load的类,并且处理好它们之间的关系,这一切都是全自动的。依赖注入器除了要处理加载器以外,还需要处理类之间的关系,这就需要一些额外的配置,比如['db']之类,这些设置被称为服务注册


设定好加载器和依赖注入器之后就可以用依赖注入器作为\Phalcon\Mvc\Application类的初始化参数,初始化这个\Phalcon\Mvc\Application类,然后调用


$application->handle()->getContent()

就可以输出结果了。


如果需要更安全的使用,还可以使用php的异常机制try...catch


<?php

use Phalcon\Loader;
use Phalcon\Tag;
use Phalcon\Mvc\Url;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\DI\FactoryDefault;
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;

try {

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

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

    // Set the database service
    $di['db'] = function() {
        return new DbAdapter(array(
            "host"     => "localhost",
            "username" => "root",
            "password" => "secret",
            "dbname"   => "tutorial"
        ));
    };

    // Setting up the view component
    $di['view'] = function() {
        $view = new View();
        $view->setViewsDir('../app/views/');
        return $view;
    };

    // Setup a base URI so that all generated URIs include the "tutorial" folder
    $di['url'] = function() {
        $url = new Url();
        $url->setBaseUri('/tutorial/');
        return $url;
    };

    // Setup the tag helpers
    $di['tag'] = function() {
        return new Tag();
    };

    // Handle the request
    $application = new Application($di);

    echo $application->handle()->getContent();

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


如果你想了解Application类的详细启动过程,可以参考官方文档

https://docs.phalconphp.com/en/latest/reference/applications.html#manual-bootstrapping

或者中文资料

http://avnpc.com/pages/phalcon-mvc-process

笔者如果有空,未来也会添加相关内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值