yii2的restful api路由实例详解

yii\\rest\\UrlRule

使用yii\\rest\\UrlRule来自动映射控制器的 restful 路由,简单快捷,缺点是必须得按规定好的方法名去写业务。

映射的规则如下,当然,你可以修改源码为你的习惯:

public $patterns = [
  \'PUT,PATCH {id}\' => \'update\',
  \'DELETE {id}\' => \'delete\',
  \'GET,HEAD {id}\' => \'view\',
  \'POST\' => \'create\',
  \'GET,HEAD\' => \'index\',
  \'{id}\' => \'options\',
  \'\' => \'options\',
];

除了被限制了HTTP动词对应的方法名外,其他都很好用,比如pluralize是多么的优雅啊,可以自动解析单词的复数,laravel的话要一个个的去写,反而有些不方便了

\'urlManager\'  => [
  \'enablePrettyUrl\'   => true,
  \'showScriptName\'   => false,
  \'enableStrictParsing\' => true,
  \'rules\'        => [
    [
      \'class\'   => \'yii\\rest\\UrlRule\',
      \'controller\' => [
        \'v1/user\',
        \'v1/news\',
        \'routeAlias\' => \'v1/box\'
      ],
      \'pluralize\' => true
    ],
  ]
]

自定义路由

注意我路由里很刻意的用了复数模式,但很鸡肋,因为一些单词的复数并不是简单的加个 s 就可以了。

\'urlManager\'  => [
  \'enablePrettyUrl\'   => true,
  \'showScriptName\'   => false,
  \'enableStrictParsing\' => true,
  \'rules\'        => [
    // 利用 module 做个版本号也是可以的
    \'GET <module:(v1|v2)>/<controller:\\w+>s\'         => \'<module>/<controller>/index\',
    \'GET <module:(v1|v2)>/<controller:\\w+>s/<uid:\\d+>\'    => \'<module>/<controller>/view\',
    \'POST <module:(v1|v2)>/<controller:\\w+>s\'        => \'<module>/<controller>/create\',
    \'PUT,PATCH <module:(v1|v2)>/<controller:\\w+>s/<uid:\\d+>\' => \'<module>/<controller>/update\',
    \'DELETE <module:(v1|v2)>/<controller:\\w+>s/<uid:\\d+>\'  => \'<module>/<controller>/delete\',
    \'OPTIONS <module:(v1|v2)>/<controller:\\w+>s\'       => \'<module>/<controller>/options\',

    \'<controller:\\w+>/<action:\\w+>\'       => \'<controller>/<action>\',// normal
    \'<module:\\w+>/<controller:\\w+>/<action:\\w+>\' => \'<module>/<controller>/<action>\',// module
    \'/\'                     => \'site/default\',// default route
  ]
]

当然,这种高度动态的路由也可以写的像laravel一样半静态。

\'GET v1/children\'         => \'v1/child/index\',
\'GET v1/children/<uid:\\d+>\'    => \'v1/child/view\',
\'POST v1/children\'        => \'v1/child/create\',
\'PUT,PATCH v1/children/<uid:\\d+>\' => \'v1/child/update\',
\'DELETE v1/children/<uid:\\d+>\'  => \'v1/child/delete\',
\'OPTIONS v1/children\'       => \'v1/child/options\',

如同laravel的如下

Route::get(\"/v1/children\", \"ChildController@index\");
Route::post(\"/v1/children\", \"ChildController@create\");
Route::put(\"/v1/children/{uid}\", \"ChildController@update\");
Route::patch(\"/v1/children/{uid}\", \"ChildController@update\");
Route::delete(\"/v1/children/{uid}\", \"ChildController@delete\");
Route::options(\"/v1/children\", \"ChildController@options\");

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持免费资源网。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容