Zend Framework controller输出json数据

这是一个非常基础的功能,在这里简单说一下:

在action里用

$this->_helper->getHelper('Json')->sendJson($result);

例子:

if ($rows > 0) {
	$result['code'] = 0;
	$result['ret'] = 'success';
} else {
	$result['code'] = -1;
	$result['ret'] = 'failed';
}
$this->_helper->getHelper('Json')->sendJson($result);

通过上面的代码就可以让controller输出json的数据了,是不是很简单?

基于Zend Framework 2、Require.js和Backbone.js的RESTful架构Demo

这是将Zend Framework 2官方Album的Demo改成一个客户端基于Require.js和Backbone.js,服务端基于Zend Framework 2的一个RESTful架构的Demo。

本程序将Album demo中的CRUD功能改成了一个名为AlbumRestApiController的controller提供RESTful API,这个AlbumRestApiController继承了ZF2提供的AbstractRestfulController,它可以根据HTTP请求的method:POST,GET,PUT和DELETE来自动分发请求至CRUD的action。

在前端使用Require.js来管理js的文件,用Backbone.js来实现MVC、路由分发的功能和路由欺骗的功能,js的主要程序在/public/js/application中。

建议使用谷歌Chrome当打开应用,需要配置虚拟主机,访问http://your-domain/album-rest,在页面的header里会发现一个播放器,这个播放器是用来测试页面是否有刷新的,在播放音乐的时候对页面进行操作跳转,如果URL改变了页面也改变了但音乐没有停止播放说明程序是实现了我想要的概念——网站即应用,所有的AJAX数据请求都是访问上面提到的RESTful API,做到了URI即资源。

程序的git地址:http://git.oschina.net/tonitech/RESTful-Zend-Framework-2-Demo 。

由于github服务器在国外,其下载上传速度跟开源中国提供的git库是没法比的,所以我选择了开源中国的代码托管。

本程序是本人用于学习Zend Framework 2、Require.js和Backbone.js以及RESTful概念使用,欢迎各位同仁批评指正,Fork和Star点赞!谢谢!

Zend Framework 2在Nginx服务器下无法路径重写的解决办法

今天我在我的pcDuino上添加Zend Framework 2应用程序,在Nginx中添加了Server的配置之后打开网站,发现首页没有任何问题,但是其他的Module都无法进入,我想想感觉问题应该出在路径重写的问题上。我想要不我把.htaccess的规则改写成Nginx的rewrite规则吧!然后我打开.htaccess,内容如下:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

有种虽不明但觉利的感觉,算了,我放弃我刚刚的想法,怎么办怎么办?算了,我还是去咨询一下把,于是跑到Stackoverflow去问了下这个问题,有个老外回答了下:

You really do not need any rewrite rules to make Nginx and ZF2 to play nice together. Here is a very simple Nginx configuration which I use:

server {
    listen *:80;
    server_name DOMAIN;

    # Character Set
    charset utf-8;

    # Logs
    access_log /vhosts/DOMAIN/logs/access_log main;
    error_log /vhosts/DOMAIN/logs/error_log;

    # Directory Indexes
    index index.php;

    # Document Root
    root /vhosts/DOMAIN/public;

    # Location
    location / {
        try_files $uri $uri/ /index.php;
    }

    # Error Pages
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    # PHP-FPM Support
    location ~ \.php$ {
        fastcgi_pass unix:/usr/local/etc/php-fpm/DOMAIN.sock;
        include fastcgi.conf;
    }

    # Block access to .htaccess
    location ~ \.htaccess {
        deny all;
    }
}

Of course change the paths to your current setup. Since you did not mention what type of PHP installation you are using I can’t help you there because I am currently using PHP-FPM.

Using this very simple setup all my modules are working as expected. For example I could visithttp://example.com/some/url OR http://example.com/index.php/some/url

Nginx also has a simple configuration for ZF http://wiki.nginx.org/Zend_Framework#Time_for_nginx

我试了下,果然成功了!

最重要的是配置Location的:

location / {
    try_files $uri $uri/ /index.php;
}

和阻止.htaccess的:

location ~ \.htaccess {
    deny all;
}

Zend Framework 2.0在Windows上的安装配置

所有人都知道IT行业里技术更新速度非常快,Zend Framework 1还用得意犹未尽,Zend Framework 2又发布了。尽管如此,我们还是要学习Zend Framework 2,并开始使用它。今天讲讲Zend Framework 2在windows的上的安装,安装步骤如下:

1. 到https://github.com/zendframework/ZendSkeletonApplication下载zip包,解压到你服务器的根目录。

2. 打开windows的cmd,cd到刚刚解压的ZendSkeletonApplication的目录下,执行:D:\wamp\bin\php\php5.3.10\php.exe composer.phar self-update(这里的PHP可执行文件的路径修安排替换成你电脑上的路径),提示:

Updating to version ***********************************************************.
Downloading: 100%
表示更新完成。

3. 在cmd中输入D:\wamp\bin\php\php5.3.10\php.exe composer.phar install,这时候在下载Zend的类库文件等,需要耐心等待。

4. 下载完成之后,你要配置下虚拟主机了,要保证你的服务器rewrite的功能打开。以apache为例,在httpd.ini中加入:

<VirtualHost *:80>
   DocumentRoot "D:/wamp/www/Zend2/public"
   ServerName .local
   # This should be omitted in the production environment
   SetEnv APPLICATION_ENV development
   <Directory "D:/wamp/www/Zend2/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

5.浏览器的地址栏中输入localhost,你就会看到以下页面,就表示Zend Framework 2安装成功了:

20130308215830

Zend Framework无法开启Apache服务器的mod_rewrite模块的解决办法

        Zend Framework的原理是把所有文件的访问都引向单一入口程序index.php,然后再由Zend_Controller_Router_Route进行路由转发,如果使用使用Apache服务器的.htaccess重写规则就必须打开Apache的服务器的mod_rewrite模块,但是很多的服务器是没有打开这个模块的,比如你买了一个空间,结果空间没有打开这个模块,那你又必须使用,怎么办呢?Zend Framework就不可以使用了吗?有的人说不可以,巧妇难为无米之炊。但是我想想觉得如果这个问题都没有解决Zend Framework怎么能在PHP界立足呢?
        后来我找到了解决的方法。方法其实很简单,就是在访问的时候加上index.php就可以了,例如:正常情况下的URL:http://www.youdomain.com/controller/action。现在我们只需把URL改成:http://www.youdomain.com/index.php/controller/action,并把.htaccess删除掉就可以了。