CodeIgniter: я могу перечислить элементы, но не могу загрузить один

Мой

Применение /.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Применение / Config/routes.php

$route['default_controller'] = "news";
$route['404_override'] = '';

Применение / модель /news_model.php

<?php
class News_model extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }

    public function get_news($slug = FALSE)
    {
        if ($slug === FALSE)
        {
            $query = $this->db->get('news');
            return $query->result_array();
        }

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
    }
}
?>

Приложения / контроллеры / news.php

<?php
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)
    {
        echo $slug;
        $data['news_item'] = $this->news_model->get_news($slug);
        var_dump($data);
        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');
    }
}
?>

Применения / просмотров /index.php:

<?php foreach ($news as $news_item): ?>
    <?php var_dump($news_item); ?>
    <h2><?php echo "<pre>"; echo $news_item['title'] ?></h2>
    <div id="main">
        <?php echo $news_item['text'] ?>
    </div>
    <p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p>

<?php endforeach ?>

И Приложения / Представления / View.php

<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];

Проблема в том, что я вижу индекс (который перечисляет мои новости), но когда я нажимаю на ссылку слага, он пытается перейти к:

/news/slug1

И это вызывает не найденную ошибку..

Что мне здесь не хватает?

3 ответа

Решение

Ссылка должна быть:

 <p><a href="/news/view/<?php echo $news_item['slug'] ?>">View article</a></p>

Метод индекса контроллера должен быть:

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

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

и ссылка на статью должна быть:

<p><a href="news/index/<?php echo $news_item['slug'] ?>">View article</a></p>

Предполагая, что ваш CI находится в папке /demo:
попробуйте этот htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /demo/

#Needed for CodeIgniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|pub|tmp|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

Ваше действие должно быть доступно по ссылке:
http://localhost:8080/demo/news/view/slug-here
а также NOT в:
http://localhost:8080/demo/news/slug-here

Другие вопросы по тегам