我想我应该为这样一个愚蠢的问题道歉,但是Yii2会为BigLongControllerNameController.php生成什么URL?
我想应该是/ big-long-controller-name /吗?
在我的情况下不起作用,我收到404
我还在浏览器和配置中尝试了biglongcontrollername,big_long_controller_name,bigLongControllerName。文档无济于事,要么我是盲人,要么REST路由规则对于每个人来说都是显而易见的,因此不必在Yii2文档中指定它们
我当前的路由规则
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' =>
[
'group',
'course',
'user',
'teacher',
'holiday',
'pupil',
'additional',
'degree',
// 'big-long-controller-name',
// 'BigLongControllerName',
// 'bigLongControllerName',
// 'big_long_controller_name',
]
],
'/' => 'site/index',
'/auth' => 'site/auth',
],
],
控制器没有任何特殊之处。当我将其重命名为AdditionalController.php时,它工作得很好
class BigLongControllerNameController extends RESTController
{
public $modelClass = 'app\models\AdditionalFieldOption';
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['access']['except'] = ['view', 'index', 'options'];
$behaviors['access']['rules'] =
[
[
'actions' => ['view', 'index', 'options', 'update', 'delete', 'create'],
'allow' => true,
'roles' => ['admin'],
],
];
return $behaviors;
}
我应该发布整个配置吗?
答案 0 :(得分:1)
默认情况下,控制器ID仅应包含以下字符:小写英文字母,数字,下划线,连字符和正斜杠。例如,article和post-comment都是有效的控制器ID,而article?,PostComment和admin \ post则不是。
请参阅此link。
答案 1 :(得分:1)
好的,答案是:
对于名为BigLongNameController的控制器类,Yii2的rest \ UrlRule将生成URL / big-long-controller-name s /而不是URL / big-long-controller-name /,因为它具有称为复数,默认情况下启用。我以某种方式忘记了这一点。再次对不起一个愚蠢的问题。
万一有人从Google那里来,正确的配置看起来像这样:
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' =>
[
'group',
'course',
'user',
'teacher',
'holiday',
'pupil',
'additional',
'degree',
'big-long-controller-name',
]
控制器类及其文件必须用驼峰命名,而不用连字符命名,例如BigLongControllerNameController.php包含:
class BigLongControllerNameController extends ActiveController {
// your code
}
URL为/ big-long-controller-names