【发布时间】:2014-10-31 05:32:14
【问题描述】:
我刚刚开始使用 codeigniter,现在正在对我的小项目进行管理员控制。我有客户信息列表。
当我点击查看和编辑按钮时,它给了我 404 错误
我已经在 application/config/routes.php 中配置了路径
$route['admin/clients'] = 'admin_clients/index';
$route['admin/clients/add'] = 'admin_clients/add';
$route['admin/clients/update'] = 'admin_clients/update';
$route['admin/clients/update/(:any)'] = 'admin_clients/update/$1';
$route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1';
$route['admin/clients/(:any)'] = 'admin_clients/index/$1'; //$1 = page number
重定向到编辑页面的代码
<td class="crud-actions">
<a href="'.site_url("admin").'/clients/update/'.$row['id'].'" class="btn btn-info">view & edit</a>
<a href="'.site_url("admin").'/clients/delete/'.$row['id'].'" class="btn btn-danger">delete</a>
</td>
即使删除也不起作用,它给了我同样的错误。 这是我的 .htaccess 代码
RewriteEngine on
RewriteBase /testing_palace/
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
这是我的控制器文件
<?php
class Admin_clients extends CI_Controller {
/**
* name of the folder responsible for the views
* which are manipulated by this controller
* @constant string
*/
const VIEW_FOLDER = 'admin/clients';
/**
* Responsable for auto load the model
* @return void
*/
public function __construct() {
parent::__construct();
$this->load->model('admin_client_model');
if (!$this->session->userdata('is_logged_in')) {
redirect('admin/login');
}
}
/**
* Load the main view with all the current model model's data.
* @return void
*/
public function index() {
//all the posts sent by the view
$search_string = $this->input->post('search_string');
$order = $this->input->post('order');
$order_type = $this->input->post('order_type');
//pagination settings
$config['per_page'] = 5;
$config['base_url'] = base_url() . 'admin/clients';
$config['use_page_numbers'] = TRUE;
$config['num_links'] = 20;
$config['full_tag_open'] = '<ul>';
$config['full_tag_close'] = '</ul>';
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a>';
$config['cur_tag_close'] = '</a></li>';
//limit end
$page = $this->uri->segment(3);
//math to get the initial record to be select in the database
$limit_end = ($page * $config['per_page']) - $config['per_page'];
if ($limit_end < 0) {
$limit_end = 0;
}
//if order type was changed
if ($order_type) {
$filter_session_data['order_type'] = $order_type;
} else {
//we have something stored in the session?
if ($this->session->userdata('order_type')) {
$order_type = $this->session->userdata('order_type');
} else {
//if we have nothing inside session, so it's the default "Asc"
$order_type = 'Asc';
}
}
//make the data type var avaible to our view
$data['order_type_selected'] = $order_type;
//we must avoid a page reload with the previous session data
//if any filter post was sent, then it's the first time we load the content
//in this case we clean the session filter data
//if any filter post was sent but we are in some page, we must load the session data
//filtered && || paginated
if ($search_string !== false && $order !== false || $this->uri->segment(3) == true) {
/*
The comments here are the same for line 79 until 99
if post is not null, we store it in session data array
if is null, we use the session data already stored
we save order into the the var to load the view with the param already selected
*/
if ($search_string) {
$filter_session_data['search_string_selected'] = $search_string;
} else {
$search_string = $this->session->userdata('search_string_selected');
}
$data['search_string_selected'] = $search_string;
if ($order) {
$filter_session_data['order'] = $order;
} else {
$order = $this->session->userdata('order');
}
$data['order'] = $order;
//save session data into the session
if (isset($filter_session_data)) {
$this->session->set_userdata($filter_session_data);
}
//fetch sql data into arrays
$data['count_products'] = $this->admin_client_model->count_clients($search_string, $order);
$config['total_rows'] = $data['count_products'];
//fetch sql data into arrays
if ($search_string) {
if ($order) {
$data['manufacturers'] = $this->admin_client_model->get_clients($search_string, $order, $order_type, $config['per_page'], $limit_end);
} else {
$data['manufacturers'] = $this->admin_client_model->get_clients($search_string, '', $order_type, $config['per_page'], $limit_end);
}
} else {
if ($order) {
$data['manufacturers'] = $this->admin_client_model->get_clients('', $order, $order_type, $config['per_page'], $limit_end);
} else {
$data['manufacturers'] = $this->admin_client_model->get_clients('', '', $order_type, $config['per_page'], $limit_end);
}
}
} else {
//clean filter data inside section
$filter_session_data['manufacture_selected'] = null;
$filter_session_data['search_string_selected'] = null;
$filter_session_data['order'] = null;
$filter_session_data['order_type'] = null;
$this->session->set_userdata($filter_session_data);
//pre selected options
$data['search_string_selected'] = '';
$data['order'] = 'id';
//fetch sql data into arrays
$data['count_products'] = $this->admin_client_model->count_clients();
$data['manufacturers'] = $this->admin_client_model->get_clients('', '', $order_type, $config['per_page'], $limit_end);
$config['total_rows'] = $data['count_products'];
}//!isset($search_string) && !isset($order)
//initializate the panination helper
$this->pagination->initialize($config);
//load the view
$data['main_content'] = 'admin/clients/list';
$this->load->view('templates/template', $data);
}
//index
public function add() {
//if save button was clicked, get the data sent via post
if ($this->input->server('REQUEST_METHOD') === 'POST') {
$config['upload_path'] ='public/images/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
$this->upload->initialize($config);
//$this->upload->initialize($config);
$this->load->library('form_validation');
//form validation
$this->form_validation->set_rules('client_name', 'client_name', 'required');
$clientLogo='image';
$this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
//if the form has passed through the validation
if ($this->form_validation->run()) {
if (!$this->upload->do_upload($clientLogo)) {
$error = array('error' => $this->upload->display_errors('<p>', '</p>'));
print_r($error);
}else {
//$data = array('upload_data' => $this->upload->data());
//print_r($data);
$uploadedImg=$this->upload->data();
$data_to_store = array(
'client_name' => $this->input->post('client_name'),
'client_logo'=> $uploadedImg['client_name']
);
}
//if the insert has returned true then we show the flash message
if ($this->admin_client_model->store_clients($data_to_store)) {
$data['flash_message'] = TRUE;
} else {
$data['flash_message'] = FALSE;
}
}
}
//load the view
$data['main_content'] = 'admin/clients/add';
$this->load->view('templates/template', $data);
}
/**
* Update item by his id
* @return void
*/
public function update() {
//product id
$id = $this->uri->segment(4);
//if save button was clicked, get the data sent via post
if ($this->input->server('REQUEST_METHOD') === 'POST') {
//form validation
$this->form_validation->set_rules('client_name', 'client_name', 'required');
if (empty($_FILES['clientLogo']['name'])){
$this->form_validation->set_rules('clientLogo', 'Client Logo', 'required');
}
$this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
//if the form has passed through the validation
if ($this->form_validation->run()) {
$data_to_store = array(
'client_name' => $this->input->post('client_name'),
'client_logo'=>self::do_upload($_FILES['clientLogo']['name'])
);
//if the insert has returned true then we show the flash message
if ($this->admin_client_model->update_clients($id, $data_to_store) == TRUE) {
$this->session->set_flashdata('flash_message', 'updated');
} else {
$this->session->set_flashdata('flash_message', 'not_updated');
}
redirect('admin/clients/update/' . $id . '');
}//validation run
}
//if we are updating, and the data did not pass trough the validation
//the code below wel reload the current data
//product data
$data['manufacture'] = $this->admin_client_model->get_client_by_id($id);
//load the view
$data['main_content'] = 'admin/clients/edit';
$this->load->view('templates/template', $data);
}
//update
/**
* Delete product by his id
* @return void
*/
public function delete() {
//product id
$id = $this->uri->segment(4);
$this->admin_client_model->delete_clients($id);
redirect('admin/clients');
}
//edit
}
请帮我解决这个问题,我们将不胜感激。 谢谢
【问题讨论】:
-
您是否通过退出来检查控制器...?您是否还加载了视图文件?
-
另外请粘贴控制器文件
-
请检查我是否粘贴了控制器文件。
-
查看文件路径是views/admin/clients/添加、编辑、列出php文件,当用户点击查看&编辑按钮时加载编辑文件
-
我删除了更新功能中的所有处理内容,简单的加载视图编辑但仍然显示相同的错误,我认为它的路由配置错误,请帮助我。
标签: php .htaccess codeigniter mod-rewrite