2015-08-26 50 views
1

paramenters模式我找到了一種方法來定義一個模式在URL上傳遞參數的笨......我的意思是一個模式來做這樣的事情:定義上的URL段傳遞笨

www.example.com/part/of/url/parameter1/parameter2 

我需要通過一個mac,所以模式必須與XX-XX-XX-XX-XX-XX一致,否則,框架發送404。
好吧,正如我所說我找到了一種方法來做到這一點,但我不知道這是否是最好的方法。我所做的修改在系統文件夾中的文件...特別是文件:系統/核心/ Router.php,我改變了默認的行379,並把這個另一種:

$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', str_replace(':mac', '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}', $key))); 

它的工作原理...但我想知道是否有任何方法,我不需要修改系統文件夾上的文件...我明白,這不是一個好主意。

謝謝。

回答

1

例如,你可以做到這裏面config/routes.php

$route['part/of/url/parameter1/([0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2})'] = 'my/routed/$1'; 

它只會路線符合您的格式的網址。 參見http://www.codeigniter.com/user_guide/general/routing.html節正則表達式

或者,您可以在routes.php的末尾執行此操作。

$route['part/of/url/parameter1/(:mac)'] = 'my/routed/$1'; 


$temp = []; 
foreach($route as $key => $value) 
{ 
$key = str_replace(':mac', '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}', $key); 
$temp[$key] = $value; 
} 
$route = $temp; 

到十個分量乾淨的代碼,這是很好的把這個部分上hooks,看看https://ellislab.com/codeigniter/user-guide/general/hooks.html

這是到十個分量system文件不變,因爲你將要在未來的更新笨真的很重要。

只是另一種方式:

// my rules 
$mac = '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}'; 

$route["part/of/url/parameter1/($mac)"] = 'my/routed/$1'; 
+0

感謝@Guiherme ......但有無處其中定義它們終於可以這樣寫:$路線['/一部分//URL /(:MAC) ']它就像現在我有,我認爲這是更舒適...我想連接變量$ mac =「the_pattern」的路線索引? :/ –

+0

@EloyFernándezFranco,做了同樣的更新,希望有幫助 – Guilherme

+0

謝謝@Guiherme我使用的是最後一種方法......它不是很多「弄髒」代碼的代碼,我不知道如何使用鉤子,我沒有太多時間來學習......也許將來......謝謝。 –