2015-08-18 3 views
2

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

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 rule. Пример:

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 
    } 
} 

и использовать новый класс правила в [[юй \ Web \ UrlManager :: правила]] Конфигурация:

[ 
    // ...other rules... 

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

Необходимо указать ваше действие следующим образом: ['/site/register-user']. Как documentation говорит о Инлайн Действие:

index становится actionIndex и hello-world становятся actionHelloWorld

Смежные вопросы