2017-02-25 20 views
0
獲得正確的URL

我已經創建了一個動態導航欄菜單,但無法使用參數獲取正確的URL。yii2如何從表

這裏是我的模型代碼的一部分:

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']]

如果我在一個列鏈接插入一條記錄以下方式:

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

的URL會顯示:http://yii2-web.dev/page/view,slug=abouthttp://yii2-web.dev/page/about和肯定的結果是找不到的。

+0

處理'page/view'請求的動作的簽名是什麼? – topher

+0

你可以給一個解釋,你是什麼意思的簽名的行動? –

回答

0

而是構建一個自定義的路由,你應該使用例如使用由yii2提供的路由功能:地址::至(......)

假設「約」的值是在$菜單[「路線」 ],在名爲您在名爲 '頁' 你的動作控制器 '的actionView' 你shluld

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']]) 
       ]; 

嘗試採取以深沉的樣子:

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

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

+0

我已經嘗試與Url :: to,仍然沒有找到並顯示錯誤的網址 –

+0

顯示您的控制器和您想要的路徑的鏈接的行動名稱.. – scaisEdge

+0

我已通過添加頁面控制器(actionView)更新我的問題。我的佈局中正確的靜態路由是['label'=> Yii :: t('frontend','About'),'url'=> ['/ page/view','slug'=>'about']] ]。在我的tabel記錄值是/ page/view,slug => about。關於是頁面的名稱。 –