2017-02-25 8 views
0

動的ナビゲーションバーメニューを作成しましたが、パラメータで正しいURLを取得できません。yii2テーブルから正しいURLを取得する方法

は、ここに私のモデルコードの一部です:

public function getNavMenu($menu_id) 
{ 
    $menu = Menus::find($menu_id) 
     ->where('menu_id = :menu_id', [':menu_id' => $menu_id]) 
     ->orderBy('order') 
     ->all(); 

    // $data=[]; 

    foreach ($menu as $menus) { 

     if (isset($menus->parent)) { 

      $submenu[$menus->id] = [ 
       'label' => Yii::t('frontend', ($menus['name'])), 
       'url'  => parse_url($menus['route']), 
       'options' => [ 
        ['class' => 'nav nav-pills nav-stacked'], 
        ['class' => 'nav nav-second-level'], 
        ['class' => 'nav nav-third-level'], 
       ], 
      ]; 

      $data[$menus->parent]['items'] = $submenu; 

     } else { 

      # menu 
      $data[$menus->id] = [ 
       'label' => Yii::t('frontend', ($menus['name'])), 
       'url' => (substr($menus["route"], 0, 4) == "http") 
        ? $menus["route"] 
        : [$menus["route"]], 
      ]; 
     } 

    } 

    return $data; 
} 

私のページアクション:

public function actionView($slug) 
{ 
    $this->layout = '@frontend/views/layouts/original/main.php'; 
    $model = Page::find()->where(['slug'=>$slug, 'status'=>Page::STATUS_PUBLISHED])->one(); 
    if (!$model) { 
     throw new NotFoundHttpException(Yii::t('frontend', 'Page not found')); 
    } 

    $viewFile = $model->view ?: 'view'; 
    return $this->render($viewFile, ['model'=>$model]); 
} 

私のスタティックルートがある:['label' => Yii::t('frontend', 'About'), 'url' => ['/page/view', 'slug'=>'about']]

私は1つの列リンクのレコードを挿入した場合

  • /page/view, slug=>about
  • /page/about

URLが表示されます:http://yii2-web.dev/page/view,slug=aboutまたはhttp://yii2-web.dev/page/aboutかつ確実に結果が見つかりませんでした。

+0

'ページ/ view'要求を処理するアクションの署名とは何ですか? – topher

+0

あなたは説明を与えることができますか?アクションの署名はどういう意味ですか? –

答えて

0

の代わりにあなたが例えばを使用してyii2が提供するのrouteing機能を使用する必要があり、ルーティングカスタム構築:URLを::(...)へ

「ルート」[$メニュー内にある「約」値を仮定すると、 ]、あなたは

use yii\helpers\Url; 

// Url::to() calls UrlManager::createUrl() to create a URL 
$data[$menus->id]= ['label' => Yii::t('frontend', ($menus['name'])), 
         'url'=> Url::to(['/page/view', 'slug'=>$menus['route']]) 
       ]; 

をshluld 'actionView' という名前の名前付き 'ページ' で、あなたのコントローラがあなたの行動ということで深く見てみてみてください。

http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html

http://www.yiiframework.com/doc-2.0/guide-helper-url.html

+0

私はUrl ::で試したが、まだ見つからず、間違ったURLを表示しました –

+0

あなたが望むリンクのコントローラーとアクション名を表示してください。 – scaisEdge

+0

ページコントローラー(actionView)を追加して質問を更新しました。私のレイアウトの正しい静的ルートは['label' => Yii :: t( 'frontend'、 'About')、 'url' => ['/ page/view'、 'slug' => 'about']です]。私のテーブルレコードの値は/ page/view、slug =>です。 aboutはページの名前です。 –

関連する問題