Yii не обнаруживает действия верблюда

Yii дает мне 404 Error если я объявлю действие, подобное этому:

SiteController.php

public function actionRegisterUser()

Вот как я называю это в main.php

 ['label' => 'Register User', 'url' => ['/site/RegisterUser']],

Я пробовал несколько разных комбинаций. Единственная комбинация, которая будет работать, — это соглашение об именах в обоих местах:

 public function actionRegisteruser

'url' => ['/site/registeruser']

Я работал над другим проектом Yii (Yii 1.0), и я мог назвать свои действия в случае верблюда и назвать их без каких-либо проблем. Нужно ли включать какую-то настройку, чтобы сделать это?

Я также пытался играть с rules контроллера, но это ничего не решило.

2

Решение

В некоторых случаях вам нужна ссылка на камеру. Например, для целей SEO (сохраняйте входящие ссылки). Вы можете создать правило перезаписи на стороне веб-сервера или добавить встроенное правило в диспетчер URL на стороне приложения. Пример:

'urlManager' => [
'rules' => [
'<controller:RegisterUser>/<action:\w+>'=>'register-user/<action>',
],
],

Также возможно написать кастом Правило URL. Пример:

namespace app\components;

use yii\web\UrlRuleInterface;
use yii\base\Object;

class CarUrlRule extends Object implements UrlRuleInterface
{

public function createUrl($manager, $route, $params)
{
if ($route === 'car/index') {
if (isset($params['manufacturer'], $params['model'])) {
return $params['manufacturer'] . '/' . $params['model'];
} elseif (isset($params['manufacturer'])) {
return $params['manufacturer'];
}
}
return false;  // this rule does not apply
}

public function parseRequest($manager, $request)
{
$pathInfo = $request->getPathInfo();
if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) {
// check $matches[1] and $matches[3] to see
// if they match a manufacturer and a model in the database
// If so, set $params['manufacturer'] and/or $params['model']
// and return ['car/index', $params]
}
return false;  // this rule does not apply
}
}

И используйте новый класс правил в конфигурации [[yii \ web \ UrlManager :: rules]]:

[
// ...other rules...

[
'class' => 'app\components\CarUrlRule',
// ...configure other properties...
],
]
2

Другие решения

Вы должны указать свое действие, как это ['/site/register-user'], Как документация говорит о Действующие действия:

index становится actionIndex, а также hello-world становится actionHelloWorld

1