在 yii2 rest urlmanager 中包含所有控制器的最佳方法
The best way to include all controllers in yii2 rest urlmanager
我正在使用 Yii2 休息服务。我想将我所有的控制器都包含在 rest url 管理器中。现在我有如下配置 main.php:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
['class' => 'yii\rest\UrlRule', 'controller' => 'usera'],
['class' => 'yii\rest\UrlRule', 'controller' => 'userb'],
['class' => 'yii\rest\UrlRule', 'controller' => 'userc'],
['class' => 'yii\rest\UrlRule', 'controller' => 'userd'],
],
],
我可以使用这样的东西,这样我就不必在配置文件中包含每个控制器吗?
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => '*'],
],
],
您可以使用两种方式:
1) 在控制器中使用数组属性
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => ['user', 'usera', 'userb'....]],
],
但是你必须设置所有控制器。
2) 创建新的 class 并从 yii\rest\UrlRule
扩展。
namespace app\rest;
class UrlRuleCustom extends UrlRule {
$path = '@app/controllers';
public function init()
{
$d = dir(Yii::getAlias($this->path));
$arr = [];
while (false !== ($entry = $d->read())) {
if (strpos($entry, 'Controller.php') !== false) {
$arr[] = lcfirst(str_replace(['Controller.php'], '', $entry));
}
}
$this->controller = $arr;
parent::init();
}
}
在 urlManager 中:
'rules' => [
['class' => 'app\rest\UrlRuleCustom', 'path' => '@app/controllers'],
],
但我不知道 Yii::getAlias
在 UrlRuleCustom
中是否起作用。如果不起作用,请设置绝对路径或相对路径。
我正在使用 Yii2 休息服务。我想将我所有的控制器都包含在 rest url 管理器中。现在我有如下配置 main.php:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
['class' => 'yii\rest\UrlRule', 'controller' => 'usera'],
['class' => 'yii\rest\UrlRule', 'controller' => 'userb'],
['class' => 'yii\rest\UrlRule', 'controller' => 'userc'],
['class' => 'yii\rest\UrlRule', 'controller' => 'userd'],
],
],
我可以使用这样的东西,这样我就不必在配置文件中包含每个控制器吗?
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => '*'],
],
],
您可以使用两种方式: 1) 在控制器中使用数组属性
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => ['user', 'usera', 'userb'....]],
],
但是你必须设置所有控制器。
2) 创建新的 class 并从 yii\rest\UrlRule
扩展。
namespace app\rest;
class UrlRuleCustom extends UrlRule {
$path = '@app/controllers';
public function init()
{
$d = dir(Yii::getAlias($this->path));
$arr = [];
while (false !== ($entry = $d->read())) {
if (strpos($entry, 'Controller.php') !== false) {
$arr[] = lcfirst(str_replace(['Controller.php'], '', $entry));
}
}
$this->controller = $arr;
parent::init();
}
}
在 urlManager 中:
'rules' => [
['class' => 'app\rest\UrlRuleCustom', 'path' => '@app/controllers'],
],
但我不知道 Yii::getAlias
在 UrlRuleCustom
中是否起作用。如果不起作用,请设置绝对路径或相对路径。