2016-11-21 42 views
1

我使用CodeIgniter工作刪除方法名稱索引。對於index函數,我使用參數$user(這是第二個URI段)以顯示有關該用戶的一些信息。因此,默認網址如下所示:CodeIgniter的URI路由:(:2.2.6 V),我有一個簡單的類<code>User</code>與像<code>create</code>,<code>update</code>,<code>edit</code>,<code>delete</code>和<code>index</code>一些基本的方法,從URL

/user/index/john 

顯示有關用戶'john'的一些信息。

現在,我想從URL中移除術語「指標」,使它看起來像:

/user/john 

爲此我已經添加在routes.php文件下面的規則。

$route['user/(:any)'] = "user/index/$1"; 

它服務的目的,但它可以防止訪問其它功能,如/user/create和自動進入內部/user/index。爲了解決這個問題,我不能看到任何其他方式除了手動添加路由規則等

$route['user/create'] = "user/create"; 

User類,這是不冷靜在所有的每個方法。那麼,請問任何人都可以在目前的情況下給我一個更好的路由方式嗎?

這裏是我的代碼:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class User extends CI_Controller { 
    public function index($user = '') { 
     echo "index!"; 
    } 

    public function create() { 
     echo 'create!'; 
    } 
} 

注:我已經通過笨documentation的URI路由和另一個相似的問題here走了,但不能想出一個可行的解決方案。並且請不要爲CodeIgniter版本更新提出建議。

+0

爲什麼在你的特定路由中添加(:any)是否是列表中的最後一個?你不會穿着你的鍵盤輸入英寸 – TimBrownlaw

+0

@TimBrownlaw以及我保持功能列表爲了演示的目的而變小。考慮一個真實生活場景,其中類內的方法數量可能是10,20或30. – Rivnat

回答

2

我不確定,如果這是你喜歡的答案,但我認爲它應該工作。 只需將此功能放入用戶控制器即可。

public function _remap($method) 
{ 
    if (method_exists($this, $method)) 
    { 
     $this->$method(); 
    } 
    else 
    { 
     $this->index($method); 
    } 
} 
+0

謝謝你的回答。重新映射函數調用(http://www.codeigniter.com/userguide2/general/controllers.html#remapping)肯定聽起來比手動添加路由規則要好。 – Rivnat

+0

好吧,thx接受 - 但請記住,您應該防止創建用戶名的可能性,如創建,更新,刪除,插入和索引。 – sintakonte

+0

CI3有這個問題,或者我的mamp配置不支持某些東西,我在默認情況下在其他web應用上使用的索引也遇到同樣的問題。這段代碼是必須的。謝謝@sintakonte! –

相關問題