我刚刚开始使用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
}
请帮我解决这个问题,回复将不胜感激。 谢谢
答案 0 :(得分:0)
使用以下.htaccess:
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$index.php/$1 [L,QSA]
答案 1 :(得分:0)
@Noor Fathima
请更改路由条件
$route['admin/clients/update/(:any)'] = 'admin_clients/update/$1';
$route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1';
$route['admin/clients/update'] = 'admin_clients/update';
$route['admin/clients/add'] = 'admin_clients/add';
$route['admin/clients/(:any)'] = 'admin_clients/index/$1'; //$1 = page number
$route['admin/clients'] = 'admin_clients/index';
答案 2 :(得分:0)
尝试修改更新函数以传递参数:
公共功能更新($ id = null)
这允许您将值或null传递给函数,并将使用您的路由。
然后你需要删除它:
//product id
$id = $this->uri->segment(4);
答案 3 :(得分:0)
试试这个:
在config.php
中使用$config['base_url'] = ''//leave it blank;
和
$config['index_page'] = ''// leave it blank;
。
将每个<a href="'.site_url("...")
更改为此<?php echo base_url("..."); ?>
。
site_url()
的每个链接都将其更改为base_url()
。看看它是否有效。也许您也可以提供config.php
,以便我们可以调试更多。