繁体   English   中英

如何从数据库在Codeigniter中设置动态路由?

[英]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  

在此处输入图片说明

确保您完成以下操作

  1. 这样删除配置上的index.php($ config ['index_page'] ='';)。
  2. 使用index.php文件检查根文件夹中的.htaccess

    放在下面

    RewriteEngine开

    RewriteCond%{REQUEST_FILENAME}!-f

    RewriteCond%{REQUEST_FILENAME}!-d

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

参考: 未找到仅索引函数有效的CodeIgniter对象

当我删除我的.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM