Phalcon+developerTools安装实践

一、安装

  a、下载编译

            git clone --depth=1 git://github.com/phalcon/cphalcon.git   //git也要有哦~

            cd cphalcon/build

            sudo ./install               //这步的./install其实是默认包含了phpize,configure,make,make install命令。如果调不到见备注

      b、修改php.ini

           extension=phalcon.so    //完成后重启nginx和php-fpm ,mac下比较麻烦,php-fpm没有专门命令重启,需要重启电脑。nginx可以。

 

 二、安装开发工具developer tools

  developer tools :实际上就是脚手架,自动生成代码用的。与yii下的自动生成代码差不多,但,它这个挺烦。

      手册上讲安装方法,针对三个平台,win、linux、mac,每个平台down不同文件。奶奶的,mac下那个文件根本就是空的,linux下developer tools,在linux本身下,安装success,可是用不了,告诉我phalcon没安装成功,使用不了,可是明明phpinfo里面可以看到phalcon了。一气不搞了,然后我无意放在mac下使用,却有效了~

      mac下,

             git clone git://github.com/phalcon/phalcon-devtools.git

         cd phalcon-devtools

             .  ./phalcon.sh       //这边要注意,先一个点号,然后空格,再一个点号

      完成。这个本该是linux下安装devtools的方法,结果mac下有效了~诶~

三、做一个小项目

 

 

四、phalcon的闪光点

      a、依赖注入:

    做的相当棒,解释的也相当好。创建一个组件SomeComponent,这个组件提供的服务,都是单独抽离出来,比如register数据库连接、注册filter过滤、注册session等等。如果就只是这样,那声明somecomponet对象时,就需要人工判断需要哪些,希望应用程序加载哪些,不加载哪些,显然这是不合理的。

            那如何实现,智能添加需要的服务,屏蔽当前用不到的服务呢?首先,显然上面的somecomponent承担了一个容器的功能,各个服务去注册,这很好但并不高效。

我们希望的是,当前不需要的服务,不要添加。此时,创新的思维出来了。在组件容器和服务之间,提供一个中间层,这个中间层同样承担容器功能,叫DI(dependency injected)依赖注入。所有服务注册全部放入DI容器对象的construct中,然后把DI作为一个参数对象,放在声明somecomponent组件对象中。组件对象在调用需要的服务时,实际调用DI的对象去实现。greate~ 聪明,这样做,使得,用户操作someComponent对象去执行某个服务时,只会调用DI中,针对该服务生成的对象。其他在DI中注册的服务,并不会new出一个对象。这样节省了很多资源。实现了,要啥只生成啥,绝不载入无用的类文件。

  b、view里的partial

     <?php echo $this->partial('index/banner'); ?>,在总视图layout中,引入头部视图,本以为与Yii类似,激活一个widget,后来发现不是,它不调用action,只调用对应的view,神奇,因此在bannerAction里面任何参数都无效,也无法echo出任何东西,甚至你删掉bannerAction都不影响。如果你想要一个参数,全局都可以调用,比如,welcom,***用户名,或者当前action name,可以考虑放在ControllerBase下的beforeExecuteRoute函数里面。如果只是某个action下的参数,可以直接在对于action下使用,如indexAction下 $this->view->setVar("msg", $msg);

 

 举个例子:

过去:你 出去要带 +现金 +信用卡

现在: 你 --------钱包-----------现金+信用卡

在你需要现金时,直接用现金,与信用卡无关,在你取钱时,又与现金有无关。你只要操作钱包即可。

 

//Using an anonymous function, the instance will lazy loaded  //懒加载
$di->set("request", function(){
    return new Phalcon\Http\Request();
});

 

 

di作为applications的属性加入构造对象,典型的组合模式,这样application父类models下的子类都可以获得getDI(),然后使用DI服务~

 

 备注:

sudo apt-get install php5-dev libpcre3-dev gcc make  git      //要检查这些是否已经安装好

 

phalcon在nginx、apache、wamp下的配置:

https://www.digitalocean.com/community/tutorials/how-to-install-and-get-started-with-phalcon-on-an-ubuntu-12-04-vps //安装phalcon

http://phalcon.5iunix.net/reference/nginx.html   //nginx下的

http://phalcon.5iunix.net/reference/apache.html //apache下的

http://phalcon.5iunix.net/reference/wamp.html  //wamp下的

posted @ 2014-03-25 11:36  zyliang  阅读(1676)  评论(0编辑  收藏  举报