Ошибка CodeIgniter Routing-404 - PullRequest
       0

Ошибка CodeIgniter Routing-404

3 голосов
/ 02 января 2012

Следуя инструкциям CI News Tutorial

Я делаю только раздел новостей, поэтому я изменил контроллер по умолчанию на 'news'

$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['default_controller'] = 'news';

Сейчасошибка 404 генерируется из якорей «Просмотреть статью».Изменение значения по умолчанию:

 $route['default_controller'] = 'welcome';

создает правильный путь.Как мне изменить роутер на использование новостей?

Никаких пользовательских настроек или .htaccess не используется.

Из config.php:

$config['base_url'] = 'http://frameworks:8888/ci_site_tut/';

$config['index_page'] = 'index.php';

Контроллер новостей:

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* 
*/
class News extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('news_model');
    }

    public function index()
    {
        $data['news'] = $this->news_model->get_news();

        $data['title'] = 'News Archive';

            $this->load->view('templates/header', $data);
            $this->load->view('news/index', $data);
            $this->load->view('templates/footer');


    }


    public function view($slug)
    {
        $data['news_item'] = $this->news_model->get_news($slug);

        if (empty($data['news_item']))
        {
            show_404();
        }

        $data['title'] = $data['news_item']['title'];

        $this->load->view('templates/header', $data);
        $this->load->view('news/view', $data);
        $this->load->view('templates/footer');
    }

    public function create()
    {
        $this->load->helper('form');
        $this->load->library('form_validation');

        $data['title'] = 'Create A News Item';

        $this->form_validation->set_rules('title', 'Title', 'required');
        $this->form_validation->set_rules('text', 'Text', 'required');

        if ($this->form_validation->run() === FALSE) 
        {
                $this->load->view('templates/header', $data);
                $this->load->view('news/create');
                $this->load->view('templates/footer');
        } else {


            $this->news_model->set_news();
            $this->load->view('news/success');

        }



    }

}

РЕШЕНИЕ:

Помощник по автозагрузке URL:

$autoload['helper'] = array('url');

Обновлены маршруты:

$route['default_controller'] = 'news';
$route['404_override'] = 'errors/page_missing';
$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';

Обновлен URL в views / news / index.php:

<p><a href="<?php echo site_url('news/' . $news_item['slug']); ?>">View Article</a></p>  

Ответы [ 3 ]

1 голос
/ 04 января 2012

Не похоже, что вы устанавливаете $ new_item ['slug'] где-либо в вашем методе view.сделайте 'print_r($data['news_item']) в вашем методе view непосредственно перед загрузкой ваших представлений, чтобы увидеть, действительно ли вы устанавливаете slug.

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

<a href="<?php echo site_url('news/'.$news_item['slug']); ?>">View article</a>
0 голосов
/ 12 ноября 2013

Я также столкнулся с ошибкой маршрутизации 404 page not found. Поэтому я думаю, что мой ответ поможет некоторым пользователям, которые сталкиваются с той же проблемой. Вот мои два цента.

Если кто-то точно следовал учебнику по новостям CI , он, скорее всего, попадет в описанную выше проблему. Чтобы избежать ошибки, вам нужно иметь route configuration в порядке точно , указанном ниже:

$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = "pages/view";
$route['404_override'] = '';

Поскольку люди, которые следуют этому уроку, скорее всего, приходят с предыдущей страницы урока и добавляют новые конфигурации маршрутов к уже существующим, которые приводят их к беде.

И еще, в методе view контроллера News измените строку

$data['news'] = $this->news_model->get_news($slug);

до

$data['news_item'] = $this->news_model->get_news($slug);

Они должны были подчеркнуть порядок конфигураций маршрута и удалить опечатку в коде. Надеюсь, это поможет.

0 голосов
/ 02 января 2012

Вам не нужны никакие из этих пользовательских маршрутов, только контроллер представления.Установите пустую страницу индекса и удалите базовый URL.Вам просто нужен метод создания и просмотра в вашем контроллере новостей.

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