Phalcon PHP Framework 1.1 正式版发布 - 开源中国社区
Phalcon PHP Framework 1.1 正式版发布
netstu_ 2013年05月08日

Phalcon PHP Framework 1.1 正式版发布

netstu_ netstu_ 发布于2013年05月08日 收藏 25 评论 23

有免费的MySQL,为什么还要买? >>>  

经历多个beta发布版本后,Phalcon 1.1正式发布!

此版本增加了一些新的功能,修正以及改善了目前的组件,大大提升了性能。我们一直在不断的寻找性能与功能之间的最佳平衡,建立一个可靠的PHP框架,使之表现更加出色。 此版本主要更新的功能特点如下:

QueryBuilder Paginator(QueryBuilder 分页组件)

在版本1.1之前,框架中只能使用ModelResultset 和 NativeArray两种内置分页方式,这个版本开始提供QueryBuilder的分页方式,使用SQL语句的LIMIT/OFFSET子句来获得请求结果集,以便处理大型的数据集。

use Phalcon\Paginator\Adapter\QueryBuilder;

$builder = $this->modelsManager->createBuilder()
      	->columns('id, name')
  	->from('Robots')
  	->orderBy('name');

$paginator = new Paginator(array(
	"builder" => $builder,
	"limit"=> 10,
	"page" => 1
));

$page = $paginator->getPaginate();

关于此分页组件,我曾在版本v0.8时,在phalcon issue中提出改进意见

详见:https://github.com/phalcon/cphalcon/issues/319

同时还有其他用户也提出了相应的意见,详见: http://forum.phalconphp.com/discussion/129/paginating-large-amounts-of-data,同时在此贴中很好的讨论了关于Mysql大数据集分页及排序的讨论。

另一点值得注意的是,在此版本中,使用QueryBuilder Paginator的同时,相应的执行两条SQL语句,一条是查询取得将要使用的数据集,另一条是执行SQL SELECT count,同时返回total_pages和total_items两个值,使用起来相当方便,关于此特性,也是1.1版本中新加入的,详见我在官方论坛上的贴子: http://forum.phalconphp.com/discussion/272/when-i-use-new-phalcon-paginator-adapter-querybuilder-it-execute

Beanstalkd Queuing client(Beanstalkd消息队列)

此版本还内置加入了高性能的消息队列Beanstalkd消息队列的客户端实现:

<?php

//Connect to the queue
$queue = new Phalcon\Queue\Beanstalk(array(
    'host' => '192.168.0.21'
));

//Insert the job in the queue (simple)
$queue->put(array('proccessVideo' => 4871));

//Insert the job in the queue with options
$queue->put(
    array('proccessVideo' => 4871),
    array('priority' => 250, 'delay' => 10, 'ttr' => 3600)
);

while (($job = $queue->peekReady()) !== false) {

    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

如果你不清楚Beanstalkd是什么的话,(我也刚知道这个:))那么你一定听说过Gearman, RabbitMQ,SquirrelMQ , HTTPSQS等

同时这里有几篇关于Beanstalkd的介绍及使用文章:

http://www.igvita.com/2010/05/20/scalable-work-queues-with-beanstalk/
http://miliwo.com/w/739/14535
http://www.blogjava.net/Skynet/archive/2009/10/30/300325.html

同时再为大家介绍一款比较不错的消息队列,那就是基于Redis的Resque 。

Encryption (加密)

此版本还实现了基于PHP mcrypt库的加密/解密类。

//Create an instance
$encryption = new Phalcon\Crypt();

$key = 'le password';
$text = 'This is a secret text';

$encrypted = $encryption->encrypt($text, $key);

echo $encryption->decrypt($encrypted, $key);

Assets Management(静态资源管理)

此组件简化了添加静态资源文件的方式,如添加javascript,css等文件,然后输出到视图。

//Add some local CSS resources
$this->assets
	->addCss('css/style.css')
	->addCss('css/index.css');

//and some local javascript resources
$this->assets
	->addJs('js/jquery.js')
	->addJs('js/bootstrap.min.js');

在视图模板文件中这样写:

<html>
    <head>
        <title>Some amazing website</title>
        <?php $this->assets->outputCss() ?>
    </head>
    <body>

        <!-- ... -->

        <?php $this->assets->outputJs() ?>
    </body>
</html>

关于此组件的实现,我在1.1版本之前也发布相应的帖子,详见 http://forum.phalconphp.com/discussion/91/view-file-struct-volt-inheritance-association 十分幸运,此功能在1.1版本做为内置功能实现了。

Exception mode in ORM Validations(在ORM验证中使用抛出异常)

在默认情况下,验证creating/updating的成功与否,通过使用方法save()/create(),update时返回布尔值true,false来进行验证这一操作是否成功。现在,你可以改变这种行为,使用异常:

use Phalcon\Mvc\Model\ValidationFailed;

try {

	$robot = new Robots();
	$robot->name = 'Bender';
	$robot->save();

} catch (ValidationFailed $e) {
	echo 'Reason: ', $e->getMessage();
}

Hostname routing

Phalcon\Mvc\Router 现在实现了基于hostname的路由方式:

$router = new Phalcon\Mvc\Router();

$router->addGet('/api/robots', array(
	'module' => 'api',
	'controller' => 'robots',
	'action' => 'index'
))->setHostName('api.phalconphp.com');

还可以使用组的方式:

$group = new Phalcon\Mvc\Router();

$group->setHostName('api.phalconphp.com');

$groop->addGet('/api/robots', array(
	'module' => 'api',
	'controller' => 'robots',
	'action' => 'index'
));

$groop->addGet('/api/robots/{id}', array(
	'module' => 'api',
	'controller' => 'robots',
	'action' => 'show'
));

$router->mount($group);

Use Controllers in Mvc\Micro (在Mvc\Micro中使用Controller)

为了更好的组织Micro应用程序,现在你可以创建一个类文件作为控制器:

$collection = new Phalcon\Mvc\Micro\Collection();

//Use direct instantiation
$collection
	->setPrefix('/posts')
	->setHandler(new PostsController());

//Lazy instantiation
$collection
	->setPrefix('/posts')
	->setHandler('PostsController', true);

$collection->get('/', 'index');

$collection->get('/edit/{id}', 'edit');

$collection->delete('/delete/{id}', 'delete');

$app->mount($collection);

1.1.0版本还包括其他一些细微的改动,Bug修复和稳定性方面的改进,具体变化可以查看完整的CHANGELOG

最后,我需要补充一点官方日志发布中没提到的,那就是 Phalcon\CLI\Console 此组件在1.1.0版本中进行了行为改变,以至于我的项目出现了问题,详见我在issue的提问 https://github.com/phalcon/cphalcon/issues/601

V0.7 版本中文文档: http://phalcon.5iunix.net

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:Phalcon PHP Framework 1.1 正式版发布
分享
评论(23)
最新评论
0
yaf有config、router和controller。文档写的很清楚。
yaf没有封装DB功能,大概出于自己的考虑。
phalcon确实比yaf功能更全面更完整,做为一个C程序员,搞这个PHP框架可能会感觉很爽。
0

引用来自“傅小黑”的评论

引用来自“netstu_”的评论

引用来自“傅小黑”的评论

基于C的扩展,性能次要考虑,结果搞的很复杂了

那就使用鸟哥的yaf吧,他那个相当简单,也是按简单来设计的

鸟哥那个又不够用,config,router,controller没了。。

别整几句英文就以为自己了不起了 好不?
你说的那3个哪个没有?
0

引用来自“netstu_”的评论

@红薯 这评论系统有BUG 吧?评论稍长一点就提示 "新闻太旧了,不允许再发表评论"

必须有中文
0
$robots->setHydrateMode(Resultset::HYDRATE_ARRAYS);
加点中文试一下
0
@红薯 这评论系统有BUG 吧?评论稍长一点就提示 "新闻太旧了,不允许再发表评论"
0
新闻太旧了,不允许再发表评论
0
为什么我不能评论了呢
0
查出来的数据怎么转成array ?
0
yii的飘过。性能一般不是项目组决定一个框架的首选。可扩展性,易用性等等
0
 两个表关联查询,怎么写?
0
+1
0
强烈支持!
0

引用来自“李马燕”的评论

引用来自“红烧土豆”的评论

用laravel的飘过

哈哈 , laravel +1

在研究,不过太不习惯里面的东西了!有点非主流了!呵呵!
0

引用来自“杰西客”的评论

一直关注,我上去一看中文翻译:“INVO使用标准的内奸路由器组件”,http://phalcon.5iunix.net/reference/tutorial-invo.html#id2 内奸都出来了,哈哈

哈哈,不好意思,打错字了,翻译完一直没时间校对
0

引用来自“netstu_”的评论

引用来自“傅小黑”的评论

引用来自“netstu_”的评论

引用来自“傅小黑”的评论

基于C的扩展,性能次要考虑,结果搞的很复杂了

那就使用鸟哥的yaf吧,他那个相当简单,也是按简单来设计的

鸟哥那个又不够用,config,router,controller没了。。

这个其实不算太复杂,从框架的实现上来说,几乎是模仿已有的框架,如Symfony2。

稍微地看了一下,感觉这是PHP框架的大杂烩,又有点点像 RoR。
0
一直关注,我上去一看中文翻译:“INVO使用标准的内奸路由器组件”,http://phalcon.5iunix.net/reference/tutorial-invo.html#id2 内奸都出来了,哈哈
0

引用来自“红烧土豆”的评论

用laravel的飘过

哈哈 , laravel +1
0
用laravel的飘过
0

引用来自“傅小黑”的评论

引用来自“netstu_”的评论

引用来自“傅小黑”的评论

基于C的扩展,性能次要考虑,结果搞的很复杂了

那就使用鸟哥的yaf吧,他那个相当简单,也是按简单来设计的

鸟哥那个又不够用,config,router,controller没了。。

这个其实不算太复杂,从框架的实现上来说,几乎是模仿已有的框架,如Symfony2。
0

引用来自“netstu_”的评论

引用来自“傅小黑”的评论

基于C的扩展,性能次要考虑,结果搞的很复杂了

那就使用鸟哥的yaf吧,他那个相当简单,也是按简单来设计的

鸟哥那个又不够用,config,router,controller没了。。
顶部