‘ ZendFramework ’ 目录归档
Zend framework 2 多语言配置
Zend Framework 2 默认支持国际化I18n,直接在Zend Studio里建的工程,也是默认就开启了多语言配置,只需要更改 ‘locale’ => ‘en_US’ 就可以修改网站显示language目录下面的.mo里的语言。但是没有找到语言切换相关的配置,比如根据浏览器的语言自动切换语言显示,或者根据用户指定的语言显示…
配置 module.config.php:
1 2 3 4 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 45 46 47 48 49 |
//此处省略N行代码 'service_manager' => array( 'allow_override' => true, 'factories' => array( 'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory' ), 'aliases' => array( 'translator' => 'MvcTranslator' ) ), 'translator' => array( 'locale' => 'en_US', 'translation_file_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __DIR__ . '/../language', 'pattern' => '%s.mo' ) ), // 由于一种语言,有多种表现形式,日语可以是ja,ja-jp,简单中文zh,zh-CN,这里归纳一下 // abbr,与框架Library同级resource下语言目录名称,看起来像缩写 // include,语言包含的形式 // 此处我的网站使用三种语言:zh_CN, en_US, zh_TW,有更多语言往后面加 'correspond' => array( 'zh_CN' => array( 'abbr' => 'zh', 'include' => array( 'zh', 'zh-CN' ) ), 'en_US' => array( 'abbr' => 'en', 'include' => array( 'en', 'en-US' ) ), 'zh_TW' => array( 'abbr' => 'zh_TW', 'include' => array( 'zh-TW' ) ) ) ), //此处省略N行代码 |
语言初始化在框架加载的时就可以做了,所以可以直接在 Module.php bootstrap里写。这里有一个优先级的问题[……]
DBShop使用Gzip方式压缩页面
在模块中的module.php文件中加如下代码
1 2 3 4 5 6 7 |
public function onBootstrap($e) { //页面压缩性能设置 if(defined('DBSHOP_ADMIN_COMPRESS') and defined('DBSHOP_FRONT_COMPRESS') and (DBSHOP_ADMIN_COMPRESS == 'true' or DBSHOP_FRONT_COMPRESS == 'true')) { $app->getEventManager()->attach("finish", array($this, "compressOutput"), 100); } } |
然后在该文件中加入compressOutput方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public function compressOutput($e) { $matches = $e->getRouteMatch(); if(!$matches) return; $controller = $matches->getParam('controller'); //前台压缩处理开启 if(DBSHOP_ADMIN_COMPRESS == 'false' and DBSHOP_FRONT_COMPRESS == 'true') { if (false === strpos($controller, __NAMESPACE__)) return; } //后台压缩处理开启 if(DBSHOP_ADMIN_COMPRESS == 'true' and DBSHOP_FRONT_COMPRESS == 'false') { if (false !== strpos($controller, __NAMESPACE__)) return; } $response = $e->getResponse(); $content = $response->getBody(); if(@strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) { header('Content-Encoding: gzip'); $content = gzencode($content, 9); } $response->setContent($content); } |
这是DBShop程序的处理方式,没有写的多么的复杂,简单易懂就可以了。
ZF2的配置信息缓存设置
我们是这样处理的,在config/application.config.php 中加入如下代码
1 2 3 4 5 6 7 8 9 10 11 12 |
return array( 'module_listener_options' => array( 'config_glob_paths' => array('config/autoload/{*}.php'), 'module_paths' => array('./module', './vendor'), /*系统配置信息缓存设置*/ 'config_cache_enabled' => true, 'config_cache_key' => md5('config'.__FILE__), 'module_map_cache_enabled' => true, 'module_map_cache_key' => md5('module_map'.__FILE__), 'cache_dir' => "./data/cache/modulecache", ) ); |
其中注释下面的是添加内容,因为我这个文件把其他内容都提出去了,所以只放了这点内容,根据你的情况加入相关内容即可。需要注意的是
./data/cache/modulecache 这个目录必须存在,如果不存在请手动创建。
另外
1 |
'config_cache_key' => md5('config'.__FILE__), |
1 |
'module_map_cache_key' => md5('module_map'.__FILE__), |
这两句中,后面之所以使用名称+__FILE__方式来计算MD[……]
拥有多个layout情况下,禁止输出它的处理方式
当项目中存在有多个layout情况下的时候(这种情况蛮多的,前台后台这就是两个了)。
我们假设后台使用的是默认layout,那么前台我是这样处理的,写在module.php文件中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function onBootstrap($e) { $app = $e->getParam('application'); $app->getEventManager()->attach('dispatch', array($this, 'setLayout')); } public function setLayout($e) { $matches = $e->getRouteMatch(); $controller = $matches->getParam('controller'); if (false === strpos($controller, __NAMESPACE__)) { return; } $viewModel = $e->getViewModel(); $viewModel->setTemplate('site/layout'); } |
这样是可以使用当前设置的layout了,假如我在这个模块的下面的页面显示中想通过ajax调用其中的一个Action显示,只显示对应的模板内容,而不显示layout,我们该如何做呢。
可能你会说,使用如下代码
1 2 3 4 5 6 |
$viewModel = new ViewModel(); $viewModel->setTerminal(true); $array = array(); ………… return $viewModel->setVariables($array); |
这在系统中只有一个默认layout下是没问题的,当时超过一个[……]
ZendFromework 2 在 IIS 上设置重写
请参考下面链接内容里的设置方式进行设置,不用设置MS SQL ,看设置 URL Rewrite 即可
http://akrabat.com/winphp-challenge/zend-framework-url-rewriting-in-iis7/
DBShop 系统是基于ZF2写的,所以上面的也适用于DBShop在IIS下的重写。
ZendFramework 2 使用技巧
1、指定使用模板文件
在Controller文件中,有时我们需要指定使用某个模板这个时候就需要下面的设置了
1 2 3 4 5 6 7 8 |
$view = new ViewModel(); $view->setTemplate('/xxxx/xxx.phtml'); $array = array(); ………… $view->setVariables($array); |
2、接收POST或GET的FROM内容
1 2 3 4 5 6 7 |
$this->request->getPost()->toArray(); //以数组形式接收POST过来的内容 $this->request->getPost('timestamp');//接收单独POST过来的值 $this->request->getQuery()->toArray(); //以数组形式接收GET过来的内容 $this->request->getQuery('timestamp');//接收单独GET过来的值 |
3、controller中获取网站url
1 |
$this->getRequest()->getServer('HTTP_HOST').$this->url()->fromRoute('frontorder/default/order_page', array('action'=>'index')); |
如果获取相对路径
1 |
$this->url()->fromRoute('frontorder/default/order_page', array('action'=>'index')); |
4、在模板中获取网站url
1 |
$this->serverUrl(); |
如果包含[……]
How to use Imagick with zf2
1 2 3 4 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 45 46 47 48 49 50 51 52 53 54 55 56 57 |
public function uploadAction() { $request = $this->getRequest(); if ($request->isPost()) { $adapter = new \Zend\File\Transfer\Adapter\Http(); $adapter->addValidator('Size', false, array('min' => UPLOAD_IMAGE_MIN_SIZE, 'max' => UPLOAD_IMAGE_MAX_SIZE)); $adapter->addValidator('MimeType', true, array('image/jpeg')); $adapter->addValidator('Count', false, array('min' =>1, 'max' => 1)); $adapter->addValidator('IsImage', false, 'jpeg'); $adapter->setDestination(UPLOAD_IMAGE_PATH . '/' . IMAGE_PATH_DEFAULT); foreach($adapter->getFileInfo() as $file => $info) { if ($adapter->isValid($file)) { $name = $adapter->getFileName($file); $fileName = CUSTOMER_ID . '_' . time() . '_' . $info['name']; $imageDefault = UPLOAD_IMAGE_PATH . '/' . IMAGE_PATH_DEFAULT . '/' . $fileName; $imageMedium = UPLOAD_IMAGE_PATH . '/' . IMAGE_PATH_MEDIUM . '/' . $fileName; $imageSmall = UPLOAD_IMAGE_PATH . '/' . IMAGE_PATH_SMALL . '/' . $fileName; $adapter->addFilter( new \Zend\Filter\File\Rename(array('target' => $imageDefault, 'overwrite' => true)), null, $file ); if ($adapter->receive($file)) { $image = new \Imagick(); /** * process with medium */ $image->readImage($imageDefault); $imageprops = $image->getImageGeometry(); if ($imageprops['width'] <= UPLOAD_SIZE_MEDIUM_WIDTH && $imageprops['height'] <= UPLOAD_SIZE_MEDIUM_HEIGHT) { $image->writeImage($imageMedium); } else { $image->resizeImage(UPLOAD_SIZE_MEDIUM_WIDTH, UPLOAD_SIZE_MEDIUM_HEIGHT, $image::FILTER_LANCZOS, 0.9, true); $image->writeImage($imageMedium); } /** * process with small */ $image->readImage($imageDefault); $imageprops = $image->getImageGeometry(); if ($imageprops['width'] <= UPLOAD_SIZE_SMALL_WIDTH && $imageprops['height'] <= UPLOAD_SIZE_SMALL_HEIGHT) { $image->writeImage($imageSmall); } else { $image->resizeImage(UPLOAD_SIZE_SMALL_WIDTH, UPLOAD_SIZE_SMALL_HEIGHT, $image::FILTER_LANCZOS, 0.9, true); $image->writeImage($imageSmall); } } } } } die; } |
Ubuntu 配置 Zend Framework
在网上找到的,其实也并不是真的想安装,只是为了把框架的依赖一同装上而已(因因为安装的是zf1现在zf2都出来了)。
第一步,打开apache的rewrite模块,因为在UBUNTU下使用apache必须执行这一步
1 2 |
sudo a2enmod rewrite #激活rewrite模块 sudo /etc/init.d/apache2 restart #激活后要重启apache服务器 |
第二步,安装Zend Framework
1 |
sudo apt-get install zend-framework |
系统会自动安装依赖包,包括bin还有php5-cli。成功安装后Zend库的位置位于/usr/share/php/libzend-framework-php目录下。
第三步,配置include[……]
php zend framework 的一些功能说明
现在的zf最新版本是ZendFramework-1.12(现在最新的已经到2了),下载后重新对里面的功能做了一些简单的分析,希望和大家一起学习进步.
1)tests文件夹里面对我们怎样使用zend framework内核提供了很好的例子,也给出了如何测试zf的方法
2)demos里面提供了实际的功能例子,对我们的实际开发有很好的参考作用
3)dojo是非常适合放到后台管理使用,但功能太强大,学习起来比较困难,对项目的按时完成有一定的风险
4)zf的zendx中提供了jquery的使用,这应该适合zf做前端的项目.
5)ZendX_Console_Process_Unix提供了并行[……]
zend framework 重定向方法(render, forward, redirect)总结
一. render
render使用来调视图用的,不会调用ACTION内部代码
不指定render
$this->render() ;
结果: {当前Module}/{当前Controller}/{当前Action}.phtml
$this->render(‘bar’) ;
结果: {当前Module}/{当前Controller}/bar.phtml
二. forward
$this->_forward(‘bar’) ;
结果: {当前Module}/{当前Controller}/bar
$this->_forward(‘b[……]
ZendFramework 中的zf tool在windows中创建数据库连接
下载了ZendFramework 1.12,在windows下配置完成了,看书或是在网上看到,说什么在windows下创建的时候,把单引号换成双引号,试了半天总是出错。后来试了下,在命令后面去掉分号,ok成功
zf configure db-adapter “adapter=PDO_MYSQL&host=localhost&username=root&password=root&dbname=xxxxx_xxx&charset=utf8” production
在书上还有网上看到多了个分号(还是在一本书上看到了,误导人了),类似于下
zf[……]
ZendFrameWork组件Layout学习笔记(转载)
试图助手可以理解成为控制页面布局,按照这个顺序进行页面的渲染
$this->headLink()
只是生成link标记占位符,例如
< ?php echo $this->headLink()->appendStylesheet(‘/css/global.css’) ?>这样就会生成如下代码
<link href=”/css/global.css” media=”screen” rel=”stylesheet” type=”text/css” >
注意了,如果你使用如下代码:
< ?php echo $this->head[……]