2012-03-19 2 views
1

Я попытался закодировать идентификатор журнала в URL-адресе приложения Code Igniter и получить его в моем контроллере. Моя конечная цель получить доступ к странице http://mysite.com/journal/3 и получить доступ к странице, содержащей сведения о журнале с ID 3.Как отправить данные в индексный метод контроллера воспламенителя кода?

В моем файле контроллера journal.php, у меня есть

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

class Journal extends Controller { 
    public function index($journalId) { 
     $data['journalId'] = $journalId; 
     $this->view->load('journalPage', $data); 
    } 
} 
?> 

В моей journalPage.php просмотреть файл, у меня есть

This event has ID <?= $journalId ?>. 

Я написал это правило в файле routes.php.

$route['journal/(:num)'] = 'journal/$1'; 

Вот файл .htaccess в моей общей папке html.

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?$1 [QSA,L] 
</IfModule> 

Однако, когда я перехожу на mysite.com/journal/3, я получаю ошибку 404. Зачем?

+0

У вас есть .htaccess файл? Если нет, вам нужно будет получить доступ к сайту через его индексную страницу: 'mysite.com/index.php/journal/3' – rjz

+0

У меня есть файл .htaccess. Работают контроллеры без данных, закодированных в URL (и методы которых не принимают параметры). Кроме того, не работают ни 'mysite.com/journal/3', ни' mysite.com/index.php/journal/3'. Интересно, что работает 'mysite.com/journal /'. Тем не менее, текст отображается как «Это событие имеет идентификатор» без фактического идентификатора события. –

+0

Вы определили правило на своих маршрутах.php? – safarov

ответ

3
$route['journal/(:num)'] = 'journal/index/$1'; 

(:num) will become invalid if you encode 

Edit: Если вы используете класс шифрования CI, чтобы кодировать ID (бессмысленный) вам нужно будет изменить его, чтобы убедиться, что строка Ури безопасна.

+0

Спасибо, я забыл «индекс» в строке '' journal/index/$ 1''. –

1

Основываясь на том, что я вижу выше, это просто ошибка начинающих при маршрутизации CI.

Вы .htaccess в порядке (вы просто удаляете index.php из URL-адреса).

На других 2 этапах (у вас есть проблемы в вашем контроллере и в настройках маршрутов).

Первый в контроллере, при создании нового контроллера необходимо расширить CI_Controller Для того, чтобы Короче говоря, это то, как ваш файл journal.php хотел как:

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

class Journal extends CI_Controller { 
    public function __construct() { 
     parent::__construct(); // This is MUST! 
    } 
    public function index($journalId) { 
     $data['journalId'] = $journalId; 
     $this->view->load('journalPage', $data); 
    } 
} 

Теперь, когда вы обновили это, мы приходим для маршрутизации config.

Конфигурация строки, которую вы написали, может только путать CI, не более того, не меньше.

Структура CI маршрута Шоуда выглядеть так:

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

Это перенаправить весь трафик из журнала/[ID] на контроллер с именем журнала, в метод с именем индекса с парам [ID].

Вы должны определить часть индекса в маршрутизации.

Попробуйте это, и все должно работать нормально. Cheers.

1

Прежде всего: вам не нужно создавать пустой конструктор (это должно [ничего!]). Если вы хотите загрузить некоторые библиотеки, помощники или модели в начале всех функций для этого контроллера, значит, это необходимо, иначе это не так.

Другой совет: попробуйте не передавать параметры функции контроллера. Вы можете поймать и управлять значениями uri с помощью URI класса CodeIgniter.

Просто сделай это:

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

class Journal extends CI_Controller 
{ 
    public function index() 
    { 
     $data['journalId'] = $this->uri->segment(2); 
     $this->view->load('journalPage', $data); 
    } 
} 

Вы лучше посмотрите на URI класса. Это очень просто! http://codeigniter.com/user_guide/libraries/uri.html

PS: Не нужно ничего исправлять на маршрутах.

Hug

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