解惑
Mon, Feb 1, 2016
终于把困扰我很久的问题搞定了,好开心。趁着记忆还热乎,一定要把它记下来。 前几天还和同事抱怨,用Yaf框架的人那么多,但我们身边竟然没有一个人对它的用法很清楚的。真是有些悲哀。几个同事都说鸟哥写的Yaf文档看不明白。 言归正传,就我自己的学习过程来看,如果你要自己搭建一个Yaf环境,遇到的问题可能主要有以下这些: 配置Nginx的rewrite规则 命名空间怎么用 目录结构设置 插件的使用 单Controller多Action配置 多模块配置 更多配置文件 下面就这些问题一一给出解答。 配置Nginx的rewrite规则 让我们直接忽略Apache和Lighttpd吧,默认大家都用Nginx。 Yaf路由规则 如果你看过官方文档,那4种路由规则我就不说了,只说最简单也是默认的Yaf_Route_Static。 读了Yaf源码的同学会发现,其实这个规则就是解析request_uri,用/把它分开,然后用每一部分去匹配Module/Controller/Action/Param。举个例子吧,假设PATH=/foo/bar/doge,更通俗一点,如果你的域名是http://yaf.dev,那么这个例子中的完整URL就是http://yaf.dev/foo/bar/doge。 路由规则做了以下动作: 解析URL,得到PATH部分 认为foo是Module,去application.modules配置中找Foo(不区分大小写) 如果找到了modules/Foo,则继续认为bar是Controller,查找modules/Foo/BarController;没找到则会认为foo是Controller,下面同4 如果找到了modules/Foo/BarController,则继续认为doge是Action,查找modules/Foo/BarController/dogeAction 这样是不是很清晰了? 不要这样配 老湿老湿,你不是要说Nginx的rewrite规则怎么配吗,怎么在这讲起了路由规则? 我是要告诉你不要听那些自作聪明的人(没错就是我)把rewrite规则配错!!! 也就是说 rewrite ^/(.*) /index.php/$1 last; 是绝对正确的,不要看谁谁谁说这不对而写成 rewrite ^/(.*) /index.php?$1 last; 这才是错误的。 我的配置: server { listen 80; root /var/www/yaf.ubuntu.com/public; index index.php index.html; server_name yaf.ubuntu.com; location = /favicon.ico { access_log off; error_log off; log_not_found off; } if (!-e $request_filename) { rewrite ^/(.