2015-08-07 12 views
1

Я застрял в этой проблеме. Я получаю ошибку 404 при попытке получить доступ к страницам администратора в codeigniter, Я могу получить доступ только к страницам с фронтальной стороны. Вот вам мой route.php файл:Codeigniter admin route

$route['default_controller'] = "page"; 
$route['404_override'] = ''; 
$route[':any'] = "page/index/$1"; **WORKS** 
$route['admin/page'] = "admin/page"; **WORKS** 
$route['admin/page/order'] = "admin/page/order"; **NOT WORKING** <!-- this i my issue --> 
$route['admin/page/edit'] = "admin/page/edit"; **WORKS** 
$route['admin/page/edit/(:num)'] = "admin/page/edit/$1"; **NOT WORKING** <!-- this i my issue --> 

Администратор контроллера

class Admin_Controller extends MY_Controller 
{ 

    function __construct() 
    { 
     parent::__construct(); 
     $this->data['meta_title'] = 'My awesome CMS'; 
     $this->load->helper('form'); 
     $this->load->library('form_validation'); 
     $this->load->library('session'); 
     $this->load->model('user_m'); 

     // Login check 
     $exception_uris = array(
      'admin/user/login', 
      'admin/user/logout' 
     ); 
     if (in_array(uri_string(), $exception_uris) == FALSE) { 
      if ($this->user_m->loggedin() == FALSE) { 
       redirect('admin/user/login'); 
      } 
     } 

    } 
} 

Frontend страниц формата

http://www.my_site.com/index.php/about 

Backend Ф.О. РМАТ

http://www.my_site.com/admin/page 
http://www.my_site.com/index.php/admin/page/edit/1 

Пожалуйста, кто-нибудь может мне помочь? Заранее спасибо.

парней спасибо за ответ Здесь у вас есть мой страницы администратора контроллера, а также я внес изменения в route.php выше.

<?php 
class Page extends Admin_Controller 
{ 

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

    public function index() 
    { 
     // Fetch all pages 
     $this->data['pages'] = $this->page_m->get_with_parent(); 

     // Load view 
     $this->data['subview'] = 'admin/page/index'; 
     $this->load->view('admin/_layout_main', $this->data); 
    } 

    public function order() 
    { 
     $this->data['sortable'] = TRUE; 
     $this->data['subview'] = 'admin/page/order'; 
     $this->load->view('admin/_layout_main', $this->data); 
    } 

    public function order_ajax() 
    { 
     // Save order from ajax call 
     if (isset($_POST['sortable'])) { 
      $this->page_m->save_order($_POST['sortable']); 
     } 

     // Fetch all pages 
     $this->data['pages'] = $this->page_m->get_nested(); 

     // Load view 
     $this->load->view('admin/page/order_ajax', $this->data); 
    } 

    public function edit ($id = NULL) 
    { 
     // Fetch a page or set a new one 
     if ($id) { 
      $this->data['page'] = $this->page_m->get($id); 
      count($this->data['page']) || $this->data['errors'][] = 'page could not be found'; 
     } 
     else { 
      $this->data['page'] = $this->page_m->get_new(); 
     } 

     // Pages for dropdown 
     $this->data['pages_no_parents'] = $this->page_m->get_no_parents(); 

     // Set up the form 
     $rules = $this->page_m->rules; 
     $this->form_validation->set_rules($rules); 

     // Process the form 
     if ($this->form_validation->run() == TRUE) { 
      $data = $this->page_m->array_from_post(array(
       'title', 
       'slug', 
       'body', 
       'template', 
       'parent_id' 
      )); 
      $this->page_m->save($data, $id); 
      redirect('admin/page'); 
     } 

     // Load the view 
     $this->data['subview'] = 'admin/page/edit'; 
     $this->load->view('admin/_layout_main', $this->data); 
    } 

    public function delete ($id) 
    { 
     $this->page_m->delete($id); 
     redirect('admin/page'); 
    } 

    public function _unique_slug ($str) 
    { 
     // Do NOT validate if slug already exists 
     // UNLESS it's the slug for the current page 


     $id = $this->uri->segment(4); 
     $this->db->where('slug', $this->input->post('slug')); 
     ! $id || $this->db->where('id !=', $id); 
     $page = $this->page_m->get(); 

     if (count($page)) { 
      $this->form_validation->set_message('_unique_slug', '%s should be unique'); 
      return FALSE; 
     } 

     return TRUE; 
    } 
} 

Front End Page Controller

<?php 

class Page extends Frontend_Controller{ 

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

    } 

    public function index(){ 
     // Fetch the page template 
     $this->data['page'] = $this->page_m->get_by(array('slug' => (string) $this->uri->segment(1)), TRUE); 
     count($this->data['page']) || show_404(current_url()); 

     // Fetch the page data 
     $method = '_' . $this->data['page']->template; 
     if (method_exists($this, $method)) { 
      $this->$method(); 
     } 
     else { 
      log_message('error', 'Could not load template ' . $method .' in file ' . __FILE__ . ' at line ' . __LINE__); 
      show_error('Could not load template ' . $method); 
     } 
     //Fetch the view 
     $this->data['subview'] = $this->data['page']->template; 
     $this->load->view('_main_layout', $this->data); 
    } 

    private function _page(){ 
     dump('welcome from the page template'); 
    } 

    private function _homepage(){ 
     $this->load->model('article_m'); 
     $this->db->where('pubdate <=', date('Y-m-d')); 
     $this->db->limit(6); 
     $this->data['articles'] = $this->article_m->get(); 
    } 

    private function _news_archive(){ 
     $this->load->model('article_m'); 

     // Count all articles 
     $this->db->where('pubdate <=', date('Y-m-d')); 
     $count = $this->db->count_all_results('articles'); 

     // Set up pagination 
     $perpage = 4; 
     if ($count > $perpage) { 
      $this->load->library('pagination'); 
      $config['base_url'] = site_url($this->uri->segment(1) . '/'); 
      $config['total_rows'] = $count; 
      $config['per_page'] = $perpage; 
      $config['uri_segment'] = 2; 
      $this->pagination->initialize($config); 
      $this->data['pagination'] = $this->pagination->create_links(); 
      $offset = $this->uri->segment(2); 
     } 
     else { 
      $this->data['pagination'] = ''; 
      $offset = 0; 
     } 

     // Fetch articles 
     $this->db->where('pubdate <=', date('Y-m-d')); 
     $this->db->limit($perpage, $offset); 
     $this->data['articles'] = $this->article_m->get(); 
    } 

} 

Надеюсь, что вы можете помочь мне Благодаря

+0

Im немного запутался в настоящее время. Можете ли вы объяснить свою иерархию классов? Я вижу «MY_Controller <- Admin_Controller <- Page», если это так, что такое Front end и что такое задний конец? пожалуйста, сломайте его лучше. Также как ваша файловая структура? Вы можете создать его здесь http://filestructuregenerator.com – CodeGodie

+0

Да, вы правы. – prezequias

+0

Да, вы правы, у меня есть: MY_Controller <- Admin_controller <- Страница для задней части и My_Controller <- FrontEnd-Controller <- Страница. – prezequias

ответ

2

Я не вижу никаких маршрутов и URL-адресов, указывающих на ваш Admin_Controller. Если пользователь вводит http://.../admin/page, Codeigniter попытается найти контроллер с именем Admin не Admin_controller, если у вас нет установленных маршрутов.

Кроме того, у вас есть этот маршрут: $route[':any'] = "page/index/$1"; Этот маршрут будет принимать любой URL и перенаправить пользователя на контроллер Page (который вы не указали на какой-либо код). Я бы избавился от него или какова его функция?

Что вам нужно решить, должен ли ваш администратор URL такой: http://www.my_site.com/admin/page или это: http://www.my_site.com/admin_controller/page

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


Конечный результат должен быть таким:

Ваш админ URL: http://www.my_site.com/admin/page

Ваш контроллер: application/controllers/Admin.php

class Admin extends MY_Controller { 

    public function __construct() { 
     //... your code here 
    } 

    public function page() { 
     //... your code here 
    } 
} 
+0

Спасибо за ваш ответ. – prezequias

+0

CodeGodieI, я отредактировал свой вопрос, разместив страницу Admin Crontroller, на самом деле у меня есть страница Adim, Article Admin, Dashboard Admin ad User Admin. – prezequias

+0

маршруты, которые вы предоставили, все равно не должны работать. маршруты работают в последовательном порядке сверху вниз, а это означает, что все ваши маршруты идут по этому маршруту::. – CodeGodie

-1

Вы, кажется, не имеют

function index() 

в вашем контроллере администратора.