2013-09-11 5 views
3

У меня есть имя контроллера 'abc'аргумент pass в функции индекса контроллера

Теперь я определяю в нем функцию индекса.

Теперь, когда я перехожу к www.example.com/abc/ или www.example.com/abc/index, я вижу свою страницу.

Теперь, когда я прохожу аргумент в этой функции индекса я должен был бы назвать его как:

www.example.com/abc/index/argument 

Итак, как я могу назвать мой аргумент, как

www.example.com/abc/argument 

без лечения этого «аргумент» как публичная функция?

+3

'_remap()' будет делать трюк, этот вопрос был ответом много раз на stackoverflow, см. Здесь, пожалуйста, также с моим комментарием ниже ответа http://stackoverflow.com/questions/18686389/handling-get-urls-in -codeigniter/18686593 # 18686593 – Kyslik

+0

Маршрутизация, _remap(), call_user_func_array - все это хорошие методы. Честно говоря, просто используйте «$ argument = $ this-> uri-> segment (1);». Чистый, организованный и простой. http://stackoverflow.com/questions/16424480/how-to-pass-multiple-variables-from-url-request-in-codeigniter/16425141#16425141 – envysea

ответ

7

вы можете добавить маршрут для этого в файле routes.php, как:

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

делает это будет маршрут Ваш URL www.example.com/abc/argument в www.example.com/abc/index/argument

+0

Может возникнуть непредвиденное поведение, если он попытался вызвать '/ abc/index/argument' и получить '/ abc/index/index/argument'. –

+0

@sudhir Iam ask somethin else – Rahul

+1

@Rahul Возможно, вам следует уточнить, что вы просите, потому что это похоже на хороший способ ответить на вашу проблему. – Jeemusu

1

Единственный способ использовать это, чтобы иметь новый контроллер ,

В вашем случае это должно быть имя argument, которое могло бы заставить его работать по своему усмотрению.

4

Вы ищете remapping?

public function _remap($method, $params = array()) 
{ 
    if (method_exists($this, $method)) 
    { 
     return call_user_func_array(array($this, $method), $params); 
    } 
    else 
    { 
     return $this->index($method); 
    } 
    show_404(); 
} 
1

Если вы не хотите перезаписать CI_Exceptions/функция show_404, которая обеспечит неустойчивое решение, вы можете попробовать использовать другую функцию д внутри класса аЬс:

function d(){ 
     $argument= $this -> uri -> segment(3); 
     if ($argument) { 
      //do something 
     } 
    } 

, а затем вы называете его с этим: WWW .example.com/abc/d/argument

0

Вы можете создать функцию init в классе контроллера, а затем проверить, есть ли какая-либо функция с именем ваш первый аргумент function_exist(), следуя http://php.net/manual/en/function.function-exists.php, а затем вызовите функцию индекса на $ this-> index() a nd передайте аргумент функции индекса индексом $ this-> index ($ arg1).

Смежные вопросы