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
Контролера, но это ничего не решило.
В некоторых случаях вам нужна ссылка на camelcase. Например, для целей 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... ], ]
Вы должны указать свое действие следующим образом: ['/site/register-user']
. Поскольку документация говорит о Inline Actions :
index
становитсяactionIndex
, аhello-world
становитсяactionHelloWorld