2017-04-03 56 views
-1

在我的routes.php文件的文件我已经添加了路由下面的代码:如何在数据库中设置codeigniter中的动态路由?

$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

但是没有显示任何数据。显示“找不到对象!”。这里是我的看法形象:Home View 点击后,它会显示如下:after clicking item

我该如何解决这个问题?

+1

super_shop_register是你的base_url的一部分吗?在你发布的视图代码中,它看起来应该是report /,$ row-> item和$ row-> id之后的两个参数,为什么只有id出现? – Pacio

+0

我认为它与另一条路线相匹配,你可以发布你的完整路线 –

+0

base_url是好的。当我拍摄快照时,代码只有$ row-id。这就是为什么在url中只显示id。这根本不是什么大问题。 $ config ['base_url'] ='http:// localhost/super_shop_register'; –

回答

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 ?>/

+0

网址就是这样创建的。但仍显示“找不到对象! 在此服务器上找不到请求的URL。引用页面上的链接似乎是错误或过时的,请通知该页面的作者有关错误。” –

+0

您更改了根目录像我建议的? –

+0

我改变了你建议的路线。 –

1

在你的模型中这是错的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(); 
     } 

} 
?> 
+0

Opps。错误。编辑返回$ data-> result();返回$ query-> result(); 仍然无法正常工作。 –

1

加油的人,你的代码可以完美运行在我的锻炼例如

我的路线

$route['report/(:num)'] = "welcome/workout/$1"; 

我欢迎控制器

public function workout($id) 
    { 

     echo $id; 

    } 

我的网址是

http://localhost/Code/report/1 

我的输出是

1 

enter image description here

确保您做以下

  1. 删除索引。PHP的配置像这样($ config ['index_page'] ='';)。在根文件夹
  2. 检查用的.htaccess index.php文件

    ,并使其低于

    RewriteEngine叙述在

    的RewriteCond%{} REQUEST_FILENAME!-f

    的RewriteCond%{} REQUEST_FILENAME !-d

    RewriteRule ^(。*)$ index.php/$ 1 [L]

参考:CodeIgniter object not found only the index function works

当我打消了我的.htaccess代码,您的错误发生

enter image description here

希望这有助于:)

+1

@Tanzila你可以检查网址,http://localhost/super_shop_register/index.php/report/1 评论你的回应。 –

0

你的路线应该是这样的:

$route['report/(:num)'] = "home/reportcard/$1"; 

and make s URE你的htaccess文件是存在的,有代码:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php?/$0 [PT,L] 
0

简单,你可以试试这个

$route['report/(:num)'] = "home/reportcard"; 

那么您可以在功能的Reportcard参数与下面的方法获取ID在控制器和在人间传递

$report_id = $this->uri->segment(2); 
+0

问题在于路由。直接函数参数可以实现来自url的数据。 –