# PHP框架大PK
php框架有很多种,在国内应用较多的有:Thinkphp, Yii, Laravel, Codeigniter等。关于这些框架,孰优孰劣,是一个极具争议性的话题。各方支持者总能拿出自己的理由,把自己喜欢的框架捧上天,将其他框架喷成翔。
因此,冒昧地给这些框架作排名是不明智的,很容易成为众矢之的。诚如黑格尔所说:“存在即合理”,流行的PHP框架必然有其存在的市场基础,要么是简单易学,撸起袖子直接开干,学习成本低,公司易招人;要么是高效强大,代码优雅,安全健壮,但学习门槛高,公司招人成本大。
其实,完全没必要纠结于要学习哪种框架,选框架又不是选老婆,只能选一个。我们完全可以多掌握几个框架,而且是必须要这么做,不然思路会很狭隘。
本系列文章之所以选用yii2构建一个完整的应用,基于我最近在深入了解yii2,便将自己对于yii2的理解表达出来,希望能帮助那些想了解yii2的同学。如果你对yii2感兴趣,欢迎入坑。如果你对yii2不感兴趣,更希望你能抽空了解下,给yii2一个机会,让她展现魅力,我相信,不喜欢用yii2的人,绝大部分是使用的姿势不对。好比普通人拿屠龙宝刀,只能用于切西瓜,还嫌其笨重。yii2享誉盛久,绝非浪得虚名。
那么,现在开始我们的yii2之旅吧, 少年...
![加油,少年](https://upload-images.jianshu.io/upload_images/1864602-af8b77b09ab9f0d6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
# 安装yii2
现代化的php框架都支持用composer安装,yii2自然也不例外。如果你对composer不了解,到[composer中文网](https://www.phpcomposer.com/)补课。
很悲剧的是,由于众所周之的原因,国内访问国外网络很慢,虽然composer为大多数PHP项目作了中国镜像,可对于yii2的有些插件并没有作镜像。因此,在没有梯子的情况下,用composer安装yii2很大可能是失败...
![composer安装失败](https://upload-images.jianshu.io/upload_images/1864602-a1bc661b81438205.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我尝试了好几次,都没成功...
看了[composer中文社区的说明](https://pkg.phpcomposer.com/),我也很无奈啊...
![yii2使用composer安装失败的原因](https://upload-images.jianshu.io/upload_images/1864602-7642cf2b77dcd343.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![我也很绝望啊](https://upload-images.jianshu.io/upload_images/1864602-d4796ccf2ae9f8fb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
于是,我放弃挣扎了,直接下载文档包
[归档文件下载地址](https://www.yiiframework.com/download)
![下载yii2归档文件](https://upload-images.jianshu.io/upload_images/1864602-2c8f867d812b1e12.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
# 项目初始化
将归档文件解压,重命名为yii, 进入目录,执行 `php init`
![初始化yii](https://upload-images.jianshu.io/upload_images/1864602-b7fcbb9fb2b1674c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![查看yii版本](https://upload-images.jianshu.io/upload_images/1864602-89ffa5a2d07e8ed8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
项目建立后的第一件事,就是将项目推送到远程git仓库,相信我,使用git是你写任何代码之前最明智的选择。由于github的速度较慢,建议用国内的[gitee](https://gitee.com/)作为个人代码仓库。
以下是我的[项目仓库链接](https://gitee.com/zhiqiexing/yii), 关于yii2的实战系列教程代码都会提交到此项目,欢迎star
# 配置服务
yii2有两套模板,一个是基本模板,一个是高级模板。我们下载的是高级模板,自带了前台与后台目录,因此需要设置两个域名,host配置如下:
```bash
127.0.0.1 frontend.test # 前台
127.0.0.1 backend.test # 后台
```
web服务器,我选用nginx,以下是nginx的配置:
```bash
server {
charset utf-8;
client_max_body_size 128M;
listen 80; ## listen for ipv4
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
server_name frontend.test;
root /path/to/yii-application/frontend/web/; # 你的项目路径
index index.php;
access_log /path/to/yii-application/log/frontend-access.log; # nginx日志存放在项目目录下
error_log /path/to/yii-application/log/frontend-error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ ^/assets/.*\.php$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
try_files $uri =404;
}
location ~* /\. {
deny all;
}
}
server {
charset utf-8;
client_max_body_size 128M;
listen 80; ## listen for ipv4
server_name backend.test;
root /path/to/yii-application/backend/web/; # 你的项目路径
index index.php;
access_log /path/to/yii-application/log/backend-access.log;
error_log /path/to/yii-application/log/backend-error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ ^/assets/.*\.php$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
try_files $uri =404;
}
location ~* /\. {
deny all;
}
}
```
> 注意:将`/path/to/yii-application/`修改为你的本地项目路径;
> 在项目根目录新建`log`目录存放nginx日志, 不然会报错!
重启nginx服务
浏览器访问:`http://frontend.test`
![前台界面](https://upload-images.jianshu.io/upload_images/1864602-672ae8e68a943fcd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
后台:`http://backend.test`
浏览器访问:`http://backend.test`
![后台界面](https://upload-images.jianshu.io/upload_images/1864602-963dfd1a64a601bc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
将log目录添加到`.gitignore`,提交代码到远程仓库。
# 小结
本小节讲了如何安装配置yii2。下节将讲解yii2的控制器和视图是如何交互数据的。敬请关注...