2012-09-10 97 views
0

在我目前的Contrete5項目中,我有一個頁面,它需要一個url參數。所以,網址是這樣的:如何讀取控制器on_start()方法中的url參數?

domain.com/[singlepagename]/[id] 

和控制器有相應的視圖功能:

function view($id) { ... } 

現在我需要訪問ID在on_start()函數。但是function on_start($id) { ... }會引發錯誤,而$this->get()會返回空數組。

任何想法如何我可以得到url部分on_start()

回答

1

我以前遇到過這個問題...... C5的Request對象沒有被初始化,直到各種包控制器的on_start事件被觸發之後。我相信人們提出的唯一解決方案是在你的package controller的on_start函數中手動初始化Request類。如果你看一下dispatcher.php文件,你會看到下面的代碼塊周圍線#129(在Concrete5.6.0.1):

// figure out where we need to go 
$req = Request::get(); 
if ($req->getRequestCollectionPath() != '') { 
    if (ENABLE_LEGACY_CONTROLLER_URLS) { 
     $c = Page::getByPath($req->getRequestCollectionPath(), 'ACTIVE');  
    } else { 
     $c = $req->getRequestedPage(); 
    } 
} else { 
    $c = Page::getByID($req->getRequestCollectionID(), 'ACTIVE'); 
} 

$req = Request::get(); 
$req->setCurrentPage($c); 

if ($c->isError()) { 
    // if we've gotten an error getting information about this particular collection 
    // than we load up the Content class, and get prepared to fire away 
    switch($c->getError()) { 
     case COLLECTION_NOT_FOUND: 
      $v = View::getInstance(); 
      $v->render('/page_not_found'); 
      break; 
    } 
} 

...所以我想你可以複製所有進入你的包控制器的on_start函數,然後你有$req對象來獲取你的路徑信息和變量。

注意:我從Concrete5.6.0.1複製了該代碼。如果您使用的是不同版本的系統,則不應該只是採用上面粘貼的內容,而應從/concrete/dispatcher.php文件中自行復制適當的代碼

+0

謝謝! Request類是我需要的。 'Request :: get() - > getRequestPath()'已經返回完整的請求路徑,然後我手動解析。 – johjoh

相關問題