Yii2 rest \ UrlRule从多字控制器名称生成什么样的路由?

时间:2019-07-10 21:16:45

标签: php rest yii2

我想我应该为这样一个愚蠢的问题道歉,但是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;
    }

我应该发布整个配置吗?

2 个答案:

答案 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