Symfonyob娱乐下载 2.2新增功能:新增PropertyAccess组件
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
如果您编写大型应用程序,您可能会发现自己一次又一次地重复相同的代码。您可能还开发了一些工具来避免这种情况。为了在不同的地方和应用程序中重用这些工具,它们必须是可配置的,以适应使用它们的代码的结构。新PropertyAccess组件这对你有帮助。
注意:这个组件的代码不是新的。它在国内已经存在了很长时间表单组件.我们决定将其提取到一个单独的组件,因为其他人发现它很有用,我希望您也会这样做!
让我们看一个简单的例子:数据网格。假设您创建了一个类数据表格
用于将嵌套数组转换为表。代码很简单:
12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
类数据表格{私人$行=数组();私人$列=数组();公共函数__construct($项目数组,$列){如果(!is_array ($项目) && !$项目运算符\可否认的){扔新\ InvalidArgumentException (“网格项应该是一个数组或\Traversable。”);}//让键和值包含列名$列=合二为一$列,$列);//将值转换为人类可读的名称$这->列= array_map(函数($列){返回ucfirst(修剪(preg_replace (//(1)将特殊字符替换为空格//(2)在小写和大写之间插入空格数组(/ _ \ [W] + /”,' / ([a - z]) ([a - z]) / '),数组(' ',' $ 1 $ 2),$列)));},$列);//存储行数据foreach($项目作为$项) {$这->Rows [] = array_intersect_key($项,$列);}}公共函数getColumns(){返回$这->列;}公共函数getRows(){返回$这->行;}}
在控制器中,你可以传递一个简单的嵌套数组到这个网格:
1 2 3 4 5 6 7 8
$数据=数组(数组(“id”= >1,“firstName”= >“保罗”,“姓”= >“史丹利”),数组(“id”= >2,“firstName”= >“基因”,“姓”= >“席梦思”),数组(“id”= >3.,“firstName”= >“王牌”,“姓”= >“Frehley”),数组(“id”= >4,“firstName”= >“彼得”,“姓”= >“纵纵横”),);$网格=新DataGrid ($数据,数组(“firstName”,“姓”));
在模板中显示这个网格也非常简单:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<表格><thead><tr>{%为网格中的列。列%}<th>{{column}}th>{%endfor%}tr>thead><tbody>{%为在网格中行。行%}<tr>{%为行%}中的单元格<道明>{{cell}}道明>{%endfor%}tr>{%endfor%}tbody>表格>
尽管这很好很简单,但它有一个主要的限制:网格只能处理数组,不能处理对象。你的领域模型确实使用了对象,对吧?
让我们看看如何使用PropertyAccess组件来增强网格。请看下面的稍微改编数据表格
:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
使用ob娱乐下载\组件\PropertyAccess\PropertyAccess;类数据表格{/ /……公共函数__construct($项目数组,$列){/ /……$访问器= PropertyAccess::getPropertyAccessor ();//存储行数据foreach($项目作为$项) {$这->Rows [] = array_map(函数($路径)使用($项,$访问器){返回$访问器->getValue ($项,$路径);},$列);}}/ /……}
我们还需要调整控制器以使前面的示例工作:
1
$网格=新DataGrid ($数据,数组(“[名字]”,”(姓)));
我们修改了一些代码。我们的旧东西还能用。发生了什么事?
你注意到我们传递给的方括号中的单词了吗数据表格
实例?这些被称为属性路径.属性路径可以有不同的表示法:
路径 | 相当于 |
---|---|
(指数) |
$ data[“指数”] |
(指数)(子) |
$ data[“指数”]['子'] |
道具 |
数据- > getProp () ,数据- > isProp () ,数据- > hasProp () ,数据- > __get(道具) 或数据- >道具 ,以先找到的为准道明> |
数据- > getProp()——> getSub () ,数据- > getProp()——> isSub () 等。道明> |
Glen Jaguin is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now