Codeigniter Routing с использованием поста и получения параметров - PullRequest
0 голосов
/ 25 марта 2011

В моем файле config / rout.php есть следующее:

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

Это работает, как и ожидалось, при посещении следующего URL: mysite.com / user / id , вызывается функция в контроллере панели мониторинга, а 1-й параметр - «пользователь», а 2-й - «идентификатор». Однако при прохождении через post и получении значений, таких как mysite.com / user / id? Page = 2 , функция игнорирует параметры записи, а 1-й (и единственный) параметр равен '2'.

Мой файл config.php имеет следующие значения:

<code>
$config[‘uri_protocol’]  = “AUTO”;
$config[‘enable_query_strings’] = TRUE;

и .htaccess:

<code>
RewriteEngine on
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

Я что-то упустил в состоянии моего маршрута?

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Это определенно ваш собственный маршрут, не могли бы вы попробовать yoursite.com/user/id/?page=2, потому что я думаю, что строка id? Page = 2 передается как один параметр. Вы также можете выполнить отладку, распечатав массив переданных URL-ключей:

echo '<pre>';
print_r($this->uri->segment_array());
echo '

и вы получите все параметры, переданные вашему действию контроллера. Вы также можете увидеть этот ответ: Обработка вопросительного знака в URL в codeigniter о расширении основного класса URI, если это необходимо. Я надеюсь, что это поможет, в противном случае будет полезна дополнительная информация, например, какие URL-ключи передаются в вашем контроллере, когда вы используете обычный запрос, например site.com/user/id, и когда вы делаете site.com/user/id? страница = 2 запроса.

****** РЕДАКТИРОВАТЬ ********** Если вы используете CI 1.7.1 или 1.7.2, вы получаете страницу [1] =>, потому что в методе _fetch_uri_string у вас есть что-то вроде этого:

if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
     $this->uri_string = key($_GET);
     return;
}

Поскольку у вас есть site.com/user/id/?page=2, это означает: $ _GET ['page'] = 2, а page - это имя ключа в $ _GET

Пожалуйста, используйте ссылку выше о том, как расширить этот класс в вашем приложении и добавить сюда свою собственную логику, например, что-то вроде этого будет работать для 1.7.1 или 1.7.2

if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
     //Comment this line cause you don't need it
     //$this->uri_string = key($_GET);

     //fetch the current page number if there is one
     $page_number = (int) $_GET['page'];

     //Set the uri_string here with the proper id and pass the id (which you should get here too) and the page number as second parameter then just return; to stop execution further
     $this->uri_string = 'dashboard/index/id/'.$page_number
     return;
}

//In your dashboard controller:
//Set default values to 0 and process further
public function index($id=0, $page_number=0)
{

}

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

0 голосов
/ 25 марта 2011

Uri сегменты не помогут вам здесь.вы должны получить значение страницы с помощью

$page = $this->input->get('page');

как выглядит интерфейс вашего метода?

Я только что попробовал это

public function index($one = '', $two = '')
{
    echo $one.', '.$two.', ';
    echo '['.$this->input->get('page').']';
}

и выдает это: user, id, [2]

...