2016-04-12 17 views
0

Denetleyiciyi genişleten bir MainController var. Tüm uygulamamın denetleyicileri, herhangi bir Denetleyiciden erişilmesi gereken çeşitli yöntemler ve özellikler içeren MainController'dan genişler. veritabanında tutulan yönlendirmeler içinYii2 beforeAction yöntemi içinde runAction() yöntemini kullanın.

  • Çekler ve URL DB biri eşleşirse onları gerçekleştirir: my MainController içinde

    birçok şeyi gerçekleştirir, hangi beforeAction olduğunu.

  • Her bir denetleyici için <head> veri üretir
  • Kullanıcının, URL'nin çerez ve slug'unu temel alarak görüntülediği dili ve ülkeyi bulur. (ör. http://example.com/netherlands).
  • URL, veritabanının pages tablosundan biriyle eşleşen bir şablondan genel bir sayfa oluşturacaktır.

En son uğraştığım şey bu. Benim MainController, bu var:

$ this-> checkPages() aşağıdakileri içerir
/** 
* Before action, check all $this->before_actions satisfy. If no head_data provided, try and fill in some basics 
*/ 
public function beforeAction($action) 
{ 

    // Run parent method first 
    if (!parent::beforeAction($action)) 
     return false; 

    // Check redirects 
    $this->checkRedirects(); 

    if($this->checkPages()) 
    { 

     // If not error page, loop through before methods 
     if($action->id !== 'error') 
     { 

      // Loop through actions to peform and do them 
      foreach ($this->before_actions as $before_method) 
       $this->$before_method(); 
     } 
     return true; 
    } 

} 

:

/** 
* Check for pages 
*/ 
public function checkPages() 
{ 

    // Attempt to find page for this request 
    $page = Page::find()->where([ 'permalink' => trim(str_replace(getBaseUrl() , "", getCurrentUrl()), "/") ])->one(); 

    // If found, load it instead 
    if(!empty($page)) 
     return Yii::$app->runAction("pages/show", [ 'id' => $page->id ]); 

    // Else, return 
    return true; 

} 

ben yaşıyorum Sorunum, http://example.com/story giderseniz hiçbir olmadığından olmasıdır StoryController, eylemi çalıştırmasına ve "Gösterim/öykü/show" görünümünün çıkmasına rağmen 404 hatası döndürür.

Bunu nasıl önleyebilirim?

DÜZENLEME:

eklemek için günlük ilk diyor gösterir: "Unable to resolve the request 'story/index'".

Ama

ardından ek günlükleri gösterir: "Route to run: pages/show" ... "Running action: app\controllers\PagesController::actionShow()" .. Rendering view file: /Users/stefandunn/Documents/Local Machine Development/views/pages/show.php

Bu yüzden 404 statüsünü

cevap

0

herhangi yakalamak son bir rota ekle neden ilk günlük bir sonuç tahmin ediyorum Özel eylem için desen ve yönlendirme.

'urlManager' => [ 
    'class' => 'yii\web\UrlManager', 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     //... 
     '<any:.*>' => 'site/index' 
    ], 
], 
+0

Ben önerilen bir çözüm olarak bu düşündüğünü, ancak, standart rotalar '/' yakalamak için son kuralı kullanın. Sayfaların Oluştur/Güncelle/Sil'inde htaccess dosyasını yeniden yazdım. –