2016-12-07 16 views
0

私はYiiでプロジェクトを書いています。YiiのフレンドリーなURL

カテゴリを表示するためのルールを作成する必要があります。私はURLで正しいページにアクセスすることができますhttp://localhost/frontend/web/c/category1/category2

URLは次のようにする必要がありhttp://localhost/frontend/web/categorias/view?id=category1/category2

私は、ドキュメントを読んだが、私は正しいガイドを見つけることができません。

私が試してみました:

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     '<c:\w+><id:\d+>'=>'<categorias>/view', 
    ] 
], 

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     'c/<id:\d+>'=>'categorias/view', 
    ] 
], 

しかし、それは動作しません、私はそれをどのように行うことができます

、私はエラーを取得しますか?

おかげ

答えて

-1

私は2つのルール、システムは `カテゴリ1/category2`を扱うことができないし、何のビュー` ERROR`がないので、それは適切にエラーを表示することはできませんので、あなたがエラーを持っている別の

'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'showScriptName' => false, 
     'rules' => [ 
      'c/<category:[\w\-]+>'=>'categorias/view-first', 
      'c/<category1:[\w\-]+>/<category2:[\w\-]+>'=>'categorias/view-second', 
     ] 
    ], 
1

あなたの質問はcategory1/category2との一部については明らかではありません。私はあなたにそれの異なる解釈に基づいて答えを与えるでしょう。

1)それはあなたのようなものであることをCategoriasControlleractionViewを準備すべき複数のカテゴリ名やIDのリスト(1以上)

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     'c/<categories>'=>'categorias/view', 
    ] 
], 

です:$categoryList

public function actionView($categories) 
{ 
    $categoryList = explode('/', $categories); 
    // ...the rest of action 
} 

です$categoriesの配列には、使用するものに応じて名前またはIDが渡されます。

2)それはあなたがCategoriasControlleractionViewのようなものであることを準備する必要があり、正確に2カテゴリ名(劣らず、これ以上の)

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     'c/<name1:[\w\-]+>/<name2:[\w\-]+>'=>'categorias/view', 
    ] 
], 

のリストです:

public function actionView($name1, $name2) 
{ 
    // ...the rest of action 
} 

合格カテゴリオプションのダッシュを含む単語です。

3)それはあなたがCategoriasControlleractionViewのようなものであることを準備する必要があり、正確に2カテゴリID(劣らず、これ以上の)

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     'c/<id1:\d+>/<id2:\d+>'=>'categorias/view', 
    ] 
], 

のリストです:

public function actionView($id1, $id2) 
{ 
    // ...the rest of action 
} 

合格カテゴリintegeresです。

0

ありがとうございました。

私の質問は、1つまたは複数のカテゴリのリストであるオプション1でうまく答えられます。

私は、このオプションを試してみましたが、私は1つのカテゴリ(http://localhost/frontend/web/c/category1)を書き、が、2つの以上のカテゴリでは動作しない場合は正常に動作している:オプション2で

An Error occurred while handling another error: exception 'yii\base\ViewNotFoundException' with message 'The view file does not exist: [project_route]\frontend\views\site\error.php' in [project_route]\vendor\yiisoft\yii2\base\View.php:227

Stack trace: 
#0 [project_route]\vendor\yiisoft\yii2\base\View.php(150): yii\base\View->renderFile('D:\\Webs\\Compara...', Array, Object(frontend\controllers\SiteController)) 
#1 [project_route]\vendor\yiisoft\yii2\base\Controller.php(378): yii\base\View->render('error', Array, Object(frontend\controllers\SiteController)) 
#2 [project_route]\vendor\yiisoft\yii2\web\ErrorAction.php(109): yii\base\Controller->render('error', Array) 
#3 [internal function]: yii\web\ErrorAction->run() 
#4 [project_route]\vendor\yiisoft\yii2\base\Action.php(92): call_user_func_array(Array, Array) 
#5 [project_route]\vendor\yiisoft\yii2\base\Controller.php(154): yii\base\Action->runWithParams(Array) 
#6 [project_route]\vendor\yiisoft\yii2\base\Module.php(454): yii\base\Controller->runAction('error', Array) 
#7 [project_route]\vendor\yiisoft\yii2\web\ErrorHandler.php(93): yii\base\Module->runAction('site/error') 
#8 [project_route]\vendor\yiisoft\yii2\base\ErrorHandler.php(109): yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException)) 
#9 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\NotFoundHttpException)) 
#10 {main} 
Previous exception: 
exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "c/category1/category2".' in [project_route]\vendor\yiisoft\yii2\base\Module.php:462 
Stack trace: 
#0 [project_route]\vendor\yiisoft\yii2\web\Application.php(100): yii\base\Module->runAction('c/category1/cat...', Array) 
#1 [project_route]\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) 
#2 [project_route]\frontend\web\index.php(18): yii\base\Application->run() 
#3 {main} 

Next exception 'yii\web\NotFoundHttpException' with message 'Page not found.' in [project_route]\vendor\yiisoft\yii2\web\Application.php:112 
Stack trace: 
#0 [project_route]\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) 
#1 [project_route]\frontend\web\index.php(18): yii\base\Application->run() 
#2 {main} 

、それは仕事の罰金です2つのカテゴリがありますが、1つはありません。

私は良いオプションが1であることがわかりますが、なぜ動作しないのかわかりません。

+0

に呼び出す2つの方法を使用して、それを解決しました。とにかく - カテゴリーを '/'で区切る必要がありますか? '、'や '|'のような他の文字はより安全です。 – Bizley