我们宣布今天(时差问题,应该是昨天了)发布Phalcon 1.0.0 beta版本,发布此版本,主要是从社区得到测试反馈加以改进。此版本引入了一些比较重要的特性:
多级缓存:
这个新功能是缓存组件的一部分,允许开发人员来实现一个多级缓存。这个新功能非常有用,因为你可以保存相同的数据在多个后端缓存组件中,并可配置不同的生命周期,读取缓存从最快的适配器到最慢的一个,直到数据都已经过期:
02 |
$ultraFastFrontend = new Phalcon\Cache\Frontend\Data( array ( |
06 |
$fastFrontend = new Phalcon\Cache\Frontend\Data( array ( |
10 |
$slowFrontend = new Phalcon\Cache\Frontend\Data( array ( |
15 |
$cache = new \Phalcon\Cache\Multiple( array ( |
16 |
new Phalcon\Cache\Backend\Apc( $ultraFastFrontend , array ( |
19 |
new Phalcon\Cache\Backend\Memcache( $fastFrontend , array ( |
21 |
"host" => "localhost" , |
24 |
new Phalcon\Cache\Backend\File( $slowFrontend , array ( |
26 |
"cacheDir" => "../app/cache/" |
31 |
$cache ->save( 'my-key' , $data ); |
Volt模板引擎改进
此版本引入的一些Volt改进特性:
01 |
{# Ternary operator #} |
02 |
{{ total > 0 ? total|format('%0.2f') : '0.0' }} |
05 |
{% for robot in robots %} |
13 |
{% for robot in robots %} |
25 |
< th >{{ loop.index }}</ th > |
26 |
< th >{{ robot.id }}</ th > |
27 |
< th >{{ robot.name }}</ th > |
35 |
{# Space control delimiters #} |
37 |
{%- for robot in robots -%} |
38 |
< li > {{- robot.name -}}</ li > |
垂直/水平分片的改进
现在,你可以定义不同的数据库连接,使之一个只用于读操作,另一个只用于写操作。对于RDBMS中使用主从方式的应用场景非常有用:
1 |
class Robots extends Phalcon\Mvc\Model |
3 |
public function initialize() |
5 |
$this ->setReadConnectionService( 'dbSlave' ); |
6 |
$this ->setWriteConnectionService( 'dbMaster' ); |
在大中型项目中,在数据库设计的时候,考虑到数据库最大承受数据量,通常会把数据库或者数据表水平切分,以降低单个库,单个表的压力。
因此,水平切片意味着读取数据将根据条件进行数据查询:
01 |
class Robots extends Phalcon\Mvc\Model |
03 |
public function selectReadConnection( $intermediate , $bindParams , $bindTypes ) |
06 |
if (isset( $intermediate [ 'where' ])) { |
08 |
$conditions = $intermediate [ 'where' ]; |
11 |
if ( $conditions [ 'left' ][ 'name' ] == 'id' ) { |
12 |
$id = $conditions [ 'right' ][ 'value' ]; |
13 |
if ( $id > 0 && $id < 10000) { |
14 |
return $this ->getDI()->get( 'dbShard1' ); |
17 |
return $this ->getDI()->get( 'dbShard2' ); |
23 |
return $this ->getDI()->get( 'dbShard0' ); |
记录快照
有了这项新功能,指定的Models可以设定为查询时保持记录的快照。你可以使用此功能来实现审计或只是为了知道哪些字段被更改过:
1 |
class Robots extends Phalcon\Mvc\Model |
3 |
public function initalize() |
5 |
$this ->keepSnapshots(true); |
你可以通过以下方式检测哪些字段被更改过:
2 |
$robot ->name = 'Other name' ; |
3 |
var_dump( $robot ->getChangedFields()); |
4 |
var_dump( $robot ->hasChanged( 'name' )); |
5 |
var_dump( $robot ->hasChanged( 'type' )); |
动态更新
此功能允许ORM在创建SQL UPDATE语句时,只改变有改变的字段,而不是整个表的所有字段。在某些情况下,这可以提高性能,减少应用程序与数据库服务器之间的传输数据量:
1 |
class Robots extends Phalcon\Mvc\Model |
3 |
public function initalize() |
5 |
$this ->useDynamicUpdate(true); |
验证
Phalcon\Validation 是基于ORM,ODM验证系统实现的一个独立的验证组件,该组件可以在model及collection之外实现验证规则:
01 |
$validation = new Phalcon\Validation(); |
04 |
->add( 'name' , new PresenceOf( array ( |
05 |
'message' => 'The name is required' |
07 |
->add( 'name' , new StringLength( array ( |
09 |
'minimumMessage' => 'The name is too short' |
11 |
->add( 'email' , new PresenceOf( array ( |
12 |
'message' => 'The email is required' |
14 |
->add( 'email' , new Email( array ( |
15 |
'message' => 'The email is not valid' |
17 |
->add( 'login' , new PresenceOf( array ( |
18 |
'message' => 'The login is required' |
21 |
$messages = $validation ->validate( $_POST ); |
22 |
if ( count ( $messages )) { |
23 |
foreach ( $messages as $message ) { |
版本 1.0.0还包括其他一些小改动,bug修复及稳定性方面的改进。你可以在此看到完整的更新日志
帮助测试
可以从1.0.0分支中安装此版本:
1 |
git clone http://github.com/phalcon/cphalcon |
Windows用户可以直接从下载页面下载DLL文件。
我们欢迎您提供宝贵的意见与建议,可以通过 Phosphorum, Stack Overflow or Google Group 进行交流。如果你发现了任何BUG,请在Github上创建issue.
中文文档: http://phalcon.5iunix.net