У меня есть проект Codeigniter, я не знаю, как написать маршрут - PullRequest
0 голосов
/ 14 мая 2018
$route['default_controller'] = 'home';
$route['404_override'] = 'home';
$route['translate_uri_dashes'] = FALSE;

$route['(:any)'] = "home/$1";
$route['(:any)/(:any)'] = "home/$1/$1";
$route['(:any)/(:any)/(:any)'] = "home/$1/$1/$1";
$route['(:any)/(:any)/(:any)/(:any)'] = "home/$1/$1/$1/$1";
$route['(:any)/(:any)/(:any)/(:any)/(:any)'] = "home/$1/$1/$1/$1/$1";
$route['project'] = "project";
$route['project/(:any)'] = 'project/$1';

У меня есть домашний контроллер по умолчанию, и я добавил, что дополнительный параметр $ 1 работает. Домашний контроллер полностью работает, но так же, как я хочу Project controller

$route['project'] = "project"; Is working 

но

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

Это не работает. Я не знаю, почему, пожалуйста, помогите мне. Advance

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Надеюсь, это поможет вам:

$route['default_controller'] = 'home';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;


$route['project'] = "project";
$route['project/(:any)'] = 'project/$1';
$route['project/(:any)/(:any)'] = 'project/$1/$2';

/*this should be after the project route setting or in the last 
 according to the precedence of url it always call the first match */

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

Просто совет, ваш маршрут для home контроллера должен быть таким:

/*home should start with name home where first `(:any)` tends to method name and 
second `(:any)` tends to parameters*/

$route['home'] = "home";
$route['home/(:any)'] = "home/$1";
$route['home/(:any)/(:any)'] = "home/$1/$2";

/*you can add many more like this*/
0 голосов
/ 14 мая 2018

Вы звоните

$route['project'] = "project";

, он запустит вашу функцию project контроллер index, поэтому он будет работать

$route['project/(:any)'] = 'project/method_name/$1'

, если вы позвоните, как это, будет искать project контроллер method_name функция, и вы должны передать parameter.потому что вы добавили (:any) в маршруты

Если вы используете (:any) или (:num) в маршрутах, вы должны захватить параметр в функции.

пример.

$route['project/(:any)'] = 'project/method_name/$1'    
function method_name($param1){
   //your code
}

$route['project/(:any)/(:any)'] = 'project/method_name/$1/$2'    
function method_name($param1, $param2){
   //your code
}

Вы можете просто использовать (.*) в маршруте для неограниченных параметров.и вам не нужно захватывать параметр в функции.проверьте ниже.

$route['default_controller'] = 'home';
$route['404_override'] = 'home';
$route['translate_uri_dashes'] = FALSE;

$route['(.*)'] = "home";
$route['project'] = "project";
$route['project/(.*)'] = 'project';

используйте $this->uri->segment() для захвата неограниченного количества параметров в функции

class Home extends CI_Controller {
    function index(){
        $param1 = $this->uri->segment(1);
        $param2 = $this->uri->segment(2);
        $param3 = $this->uri->segment(3);
    }
}

class Project extends CI_Controller {
    function index(){
        $param1 = $this->uri->segment(1);
        $param2 = $this->uri->segment(2);
        $param3 = $this->uri->segment(3);
    }
}
0 голосов
/ 14 мая 2018

Вы никогда не упоминаете имя метода в маршруте, поэтому маршруты не работают

Попробуйте это

$route['project/(:any)'] = 'project/method_name/$1'

Также home маршруты должны нравиться home/method_name/$1, home/index/$1/$1 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...