文章目录
Yii2 微框架
在我与Laravel相熟多年以后,由于工作原因再次触碰到Yii2这个框架,有了更多的经验积累后再回过头来看,不由的也更对Yii这个框架及作者肃然起敬,如果说Laravel的一个成功原因在于引入Composer,那么现在包括Composer以内的其他所有特性及实现,都或多或少的早就在Yii这个框架中出现了,Yii靠着自身的真正的强大来保持还站在前线,很多功能及设计都很不错,结合Yii框架的作者又是一名华裔,我觉得这一切都非常了不起。
为什么要引入Yii2微框架?个人觉得微框架有点类似于Lumen之于Laravel的关系,部分开发者的项目本身并不需要全栈型的框架,不要给予太多多余的东西,Yii2像所有其他的框架一样太“重”了,所以现在需要看起来“轻”一点,这符合现代前后端完全分离的纯API项目开发的定位,也更有利于微服务项目部署。
1 进入workspace
mkdir micro-app
cd micro-app
2 配置 Composer.json 文件
{
"require": {
"yiisoft/yii2": "~2.0.0"
},
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
}
配置完成后执行composer install
安装Yii框架及其依赖。
3 创建入口文件 index.php
为了安全起见,应用会将入口文件单独放置,所以我们在项目中新建web
目录,并创建index.php
文件
<?php
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$config = require __DIR__ . '/../config.php';
(new yii\web\Application($config))->run();
4 创建配置文件 config.php
它将包含所有的应用程序配置。
<?php
return [
'id' => 'micro-app',
// the basePath of the application will be the `micro-app` directory
'basePath' => __DIR__,
// this is where the application will find all controllers
'controllerNamespace' => 'micro\controllers',
// set an alias to enable autoloading of classes from the 'micro' namespace
'aliases' => [
'@micro' => __DIR__,
],
];
5 创建控制器目录及第一个控制器文件
新建目录controllers
,并创建控制器文件SiteController.php
<?php
namespace micro\controllers;
use yii\web\Controller;
class SiteController extends Controller
{
public function actionIndex()
{
return 'Hello World!';
}
}
6 当前项目结构
./
├── composer.json
├── composer.lock
├── config.php
├── controllers
│ └── SiteController.php
├── vendor
│ ├── autoload.php
│ ├── bin
│ ├── bower-asset
│ ├── cebe
│ ├── composer
│ ├── ezyang
│ └── yiisoft
└── web
└── index.php
7 运行
执行vendor/bin/yii serve --docroot=./web
来使用 PHP 内置 web 服务器,不出意外运行结果为Hello World!
Hello World!
配置 RESTful
创建models
目录及Post.php
文件
1 创建帖子模型
<?php
namespace micro\models;
use yii\db\ActiveRecord;
class Post extends ActiveRecord
{
public static function tableName()
{
return '{{post}}';
}
}
2 添加 PostController
往controllers
目录中添加PostController.php
文件
<?php
namespace micro\controllers;
use yii\rest\ActiveController;
class PostController extends ActiveController
{
public $modelClass = 'micro\models\Post';
public function behaviors()
{
// 这里移除rateLimiter是因为它依赖于被验证过的用户
$behaviors = parent::behaviors();
unset($behaviors['rateLimiter']);
return $behaviors;
}
}
3 可访问的路由
此时我们的 API 将提供以下 URL :
GET /posts - 列出所有帖子
GET /posts/1 - 显示 ID 为 1 的帖子
POST /posts/1 - 创建一个帖子
PUT /posts/1 - 更新 ID 为 1 的帖子
DELETE /posts/1 - 删除 ID 为 1 的帖子
完成这种RESTful的路由我事先已经配置好了Nginx
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
4 JSON API
目前API仅将 urlencoded 表单数据理解为输入,若使其成为真正的 JSON API,我们还需要一个JSON解析器。
在config.php
的components配置中加入以下代码完成配置。
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]
本文首发于Gecco’s Blog,文章地址:https://ibabysong.com/posts/201910163.html