Codeigniter admin route

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

$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');
}
}

}
}

Формат веб-страниц

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

Бэкэнд формат

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;
}
}

Контроллер фронтальной страницы

<?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();
}

}

Надеюсь, вы можете помочь мне
Спасибо

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
}
}
2

Другие решения

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

function index()

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

-1


Курсы программирования от Skillbox. Черная пятница!
Подробнее >>>
×