2014-01-27 53 views
0

我正在使用控制網站佈局的站點範圍參數。在URL中任何事情之前,該參數去,後面跟着的通常控制器/參數部分。CodeIgniter路由:在控制器之前傳遞參數並在default_controller上捕獲它

mywebsite/{section}/controller/parameter1/parameter2 

我可以定義像一個波紋管爲每個控制器路由,但想避免它作爲參數僅佈局有關,而不是控制器。

$route['(:any)/controller/(:any)/(:any)'] = 'controller/$2/$3/$1'; 

相反,我將能夠使default_controller趕上第一部分,並將其存儲作爲視圖變量或會話/餅乾,使控制器的其餘部分可以簡單地忽略它。

$route['(:any)/controller/(:any)/(:any)'] = 'controller/$2/$3'; 
+0

你說的用戶點擊其中的{section}鏈接,但最終在沒有鏈接的鏈接上? – Kenzo

+1

你爲什麼不使用會話cookie的或存儲每個用戶的*區*變量? –

+0

我不需要改變瀏覽器的URL,我只需要我解釋發生的窗簾後面。 – Lando

回答

2

正如Hashem Qolami說,這是一些與一個sessioncookie服務要好得多。

路由CI中不改變網址。它允許您更改CI對URL的操作。您可以使用服務器端的功能做你想要的東西(例如Apache的重寫,nginx的構形的,等等),但超出範圍在這裏。


編輯:

做你想做什麼不改變網址,你可以只值傳遞給視圖:

控制器:

$layout = $this->uri->segment(1); 
$data["layout"] = $layout; 
$this->load->view("cool_view", $data); 

cool_view.php:

<link rel="stylesheet" type="text/css" href="<?php echo $layout; ?>.css"> 
+0

也許我的問題是誤導性的,我不需要改變用戶在瀏覽器中看到的內容,我只需要我在CI裏面解釋的內容。 – Lando

+0

更新了答案。小心將用戶輸入傳遞給視圖(即使CI對URI中允許的內容吝嗇)。會話或cookie仍然是處理此問題的更好方法。 – stormdrain

+0

是的。每個控制器擴展主控制器,所以我想我可以在那裏添加代碼並使用會話而不是視圖變量。 – Lando

相關問題