2012-01-02 8 views
3

Après avec le CI News TutorialCodeIgniter erreur de routage-404

Je ne fais que la section de nouvelles donc je changé le contrôleur par défaut de « nouvelles »

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

Maintenant, une erreur 404 est générée à partir du 'Voir l'article' ancres. Modification de la valeur par défaut à:

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

crée le chemin correct. Comment devrais-je changer le routeur pour utiliser les nouvelles?

Aucune config personnalisée, ou .htaccess utilisé.

De config.php:

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

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

Controller Nouvelles:

<?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'); 

     } 



    } 

} 

SOLUTION:

Autoload URL Helper:

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

Mise à jour: routes

$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 Mis à jour dans les vues/nouvelles/index.php:

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

Quelle est l'URL que vous essayez d'utiliser dans votre navigateur? – Catfish

+0

View article

. index.php n'est pas inclus dans l'URL. – Wasabi

+0

J'ai eu le même problème ... Je pense que c'est une faute de frappe. J'ai changé '

Répondre

1

Il ne semble pas que vous définissiez $ new_item ['slug'] n'importe où dans votre méthode d'affichage. Faites un 'print_r($data['news_item']) dans votre méthode de vue juste avant de charger vos vues pour voir si vous définissez réellement le slug. Si vous êtes sûr que vous l'êtes, assurez-vous que l'aide d'url est chargée automatiquement et essayez d'utiliser ceci pour votre URL dans votre vue.

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

Votre suggestion a fonctionné et a également été recommandée par le site CI. également mis à jour mes itinéraires. – Wasabi

0

Vous n'avez pas besoin de ces itinéraires personnalisés, juste un contrôleur de vue. Définissez la page d'index sur vide et supprimez l'URL de base. Vous devriez juste besoin d'une méthode create and view dans votre contrôleur de news.

+0

J'ai un contrôleur de vue par le tutoriel, Les routes personnalisées ne sont pas nécessaires en raison d'avoir un seul contrôleur (Nouvelles)? Merci pour la réponse! – Wasabi

+0

La suggestion renvoie toujours un 404. – Wasabi

0

J'ai également rencontré l'erreur de routage 404 page not found. Donc, je pense que ma réponse aidera certains utilisateurs qui rencontrent le même problème. Voici mes deux cents.

Si l'on a suivi exactement les CI news tutorial, il est très probable que le problème ci-dessus se produise. Pour éviter l'erreur ce que vous devez faire est d'avoir le route configuration dans le ordre exactement donné ci-dessous:

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

Parce que les gens qui suivent ce tutoriel très probablement de la page tutoriel précédent et ajouter les nouvelles configurations de route vers la ceux qui existent déjà qui les mettent dans le pétrin.

Et autre chose est, dans la méthode view du contrôleur News, modifiez la ligne

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

à

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

Ils auraient dû souligner l'ordre des configurations d'itinéraire et supprimé la faute de frappe dans le code. J'espère que cela t'aides.