[英]How to set dynamic route in codeigniter from database?
在我的routes.php文件中,添加了以下用于路由的代码:
$route['report/:num'] = "home/reportcard/$1";
这是我的控制器代码:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Home extends CI_Controller
{
function __construct() {
parent::__construct();
if(empty($this->session->userdata('id_user'))){
$this->session->set_flashdata('flash_data', 'You cannot access');
redirect('login');
}
}
public function index(){
$this->load->model("item_model");
$data['records'] = $this->item_model->getAllItems();
$this->load->view('home',$data);
}
function reportcard($id){
$this->load->model("item_model");
$data['report'] = $this->item_model->getReport($id);
$this->load->view('report', $data);
}
function logout(){
$data=['id_user','username'];
$this->session->unset_userdata($data);
redirect('login');
}
}
这是我的模型代码:
<?php
class Item_model extends CI_Model
{
function getAllItems()
{
$this->load->database();
$q = $this->db->get("item");
if($q->num_rows() > 0)
{
return $q->result();
}
return array();
}
public function getReport($id){
$this->db->select('*');
$this->db->from('item');
$this->db->where('item.id', $id);
$query = $this->db->get();
if($query->num_rows() > 0)
return $data->result();
}
}
?>
这是视图的代码。 我只是在report_view中打印数组以进行测试:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
print_r($report);
?>
这是我的home_view代码:
<div class="row">
<ul class="home-grid">
<?php foreach ($query->result() as $row): ?>
<li>
<a href="<?php echo base_url() ?>report/<?=$row->item ?>/<?=$row->id ?>" class="btn btn-lg btn-warning view-report"><span class="glyphicon glyphicon-list-alt"></span> <br/>
<?=$row->item ?><br/>
<small>Click here for see report</small>
</a>
</li>
<?php endforeach; ?>
</ul>
我已尝试多次查看该数组。 但是无法获得数组。 如何加载视图? 当我从家里单击我的商品时,它将创建一个类似于http:// localhost / super_shop_register / report / 1的网址
但是没有显示任何数据。 显示“找不到对象!”。 这是我的观点的图像: 单击项目后,它将显示如下:
我该如何解决?
从$route['report/:num'] = "home/reportcard/$1";
更改您的根目录$route['report/:num'] = "home/reportcard/$1";
至
$route['report/(:num)'] = "home/reportcard/$1";
和
<a href="<?php echo base_url() ?>report/<?=$row->item ?>/<?=$row->id ?>" class="btn btn-lg btn-warning view-report">
这行代码将创建href="localhost/super_shop_register/report/Chips/1"
。 您需要从中删除<?=$row->item ?>/
。
在你的模型,这是不对return $data->result();
实际上$query->result();
是对的。
<?php
class Item_model extends CI_Model
{
function getAllItems()
{
$this->load->database();
$q = $this->db->get("item");
if($q->num_rows() > 0)
{
return $q->result();
}
return array();
}
public function getReport($id){
$this->db->select('*');
$this->db->from('item');
$this->db->where('item.id', $id);
$query = $this->db->get();
if($query->num_rows() > 0)
return $data->result();
}
}
?>
拜托,您的代码在我的锻炼示例中非常完美
我的路线
$route['report/(:num)'] = "welcome/workout/$1";
我的欢迎控制器
public function workout($id)
{
echo $id;
}
我的网址是
http://localhost/Code/report/1
我的输出是
1
确保您完成以下操作
使用index.php文件检查根文件夹中的.htaccess
放在下面
RewriteEngine开
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule ^(。*)$ index.php / $ 1 [L]
当我删除我的.htaccess代码,您会出现错误
希望这可以帮助 :)
您的路线应如下所示:
$route['report/(:num)'] = "home/reportcard/$1";
并确保您的htaccess文件在那里并包含以下代码:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L]
简单,您可以尝试一下
$route['report/(:num)'] = "home/reportcard";
那么您可以在控制器中使用以下方法获取ID,而在函数reportcard参数中没有任何传递
$report_id = $this->uri->segment(2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.