在Zurmo的list页面提供了一个导出CSV文件的功能,下面介绍如何实现:
在对应的DefaultController里的actionExport()方法如下:
public function actionExport() {
$this->export ( 'UsersSearchView' );
}
从这里按住Ctal键可以去export方法的详细页面,在modules/zurmo/compontents/ZurmoModuleController.php 可以看到。
1:$modelToExportAdapter = new ModelToExportAdapter($model); 获得对应的实例
2:$data[] = $modelToExportAdapter->getData(); 获得对应的数据
在这个方法里有这两句代码,从第二句代码再进去看具体的实现,会跳到module/exports/adapters/ModelToExportAdapter.php里,在getData()方法里看具体的实现,这里有一个判断的条件,如下
$this->getRedBeanModelAttributeValueToExportValueAdapterClassName($attributeName)
去看这个代码的具体实现可以发现,这个方法其实就是构建一个文件的名字,就是到时候用来在自己模块里重导出具体的CSV文件的内容。
$type = ModelAttributeToMixedArrayTypeUtil::getType($this->model, $attributeName);
$adapterClassName = $type . 'RedBeanModelAttributeValueToExportValueAdapter';
从上面的代码可以看出:在User模块就是对应在users/adapter下的UserRedBeanModelAttributeValueToExportValueAdapter.php文件。
还要看getType()方法的具体实现:在protected/core/utils/ModelAttributeToMixedArrayTypeUtil.php里:
在这个方法看到代码:
if ($model->getRelationModelClassName($attributeName) == 'User')
{
return 'User';
}
就是对应user的返回值。至此整个流程就大概走完了,现在回到getData()方法里:
$adapter = new $adapterClassName($this->model, $attributeName);
$adapter->resolveData($data);
这个resolveData()的具体实现就是在UserRedBeanModelAttributeValueToExportValueAdapter.php里,里面就是关于导出的CSV文件里的user的具体的属性的设置了。
这个博客说完可能还不是很清楚,这个也只是zurmo自带模块的导出设置,如果是自己自定义的模块的导出CSV还需要一些特殊的设置,在下一篇博客会结合一个具体的问题来说明。
如有不对,请指正!