【问题标题】:How to set dynamic route in codeigniter from database?如何从数据库中在 codeigniter 中设置动态路由?
【发布时间】:2017-08-28 01:21:05
【问题描述】:

在我的 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的网址

但没有显示任何数据。显示“找不到对象!”。这是我的观点图片: 点击item后会显示如下:

我该如何解决这个问题?

【问题讨论】:

  • super_shop_register 是您的 base_url 的一部分吗?在你发布的视图代码中看起来他们应该是report/之后的两个参数,$row->item和$row->id,为什么只有id出现?
  • 我认为它与另一条路线匹配,您可以发布您的完整路线
  • base_url 没问题。当我拍摄快照时,代码只有 $row-id。这就是为什么在 url 中只显示 id 的原因。这根本不是什么大问题。 $config['base_url'] = 'localhost/super_shop_register';
  • 这是我的 route.php 代码:$route['default_controller'] = 'login'; $route['report/:num'] = "home/reportcard/$1"; $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE;
  • 没有人注意到这是为什么?在您的模型中,这是错误的 return $data->result();实际上 $query->result();是对的。

标签: php html mysql codeigniter


【解决方案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"。 您需要从中删除&lt;?=$row-&gt;item ?&gt;/

【讨论】:

  • url 是这样创建的。但仍然显示“找不到对象!在此服务器上找不到请求的 URL。引用页面上的链接似乎错误或过时。请告知该页面的作者该错误。”
  • 您按照我的建议更改了根目录?
  • 我已经改变了你建议的路线。
  • localhost/super_shop_register/index.php/report/1 。然后尝试打开此网址。请注意,最后一个参数应该是有效的项目 ID 而不是 1。
  • 如果我打开这个 url,它将打印带有我想要打印的值的数组。输出:Hello WorldArray ([0] => stdClass Object ([id] => 3 [item] => Chocolate [description] => Chocolate [created] => 2017-03-07))
【解决方案2】:

在你的模型中这是错误的return $data-&gt;result(); 实际上$query-&gt;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();
        }

}
?>

【讨论】:

  • 奥普斯。错误。编辑返回 $data->result();返回 $query->result();还是不行。
【解决方案3】:

拜托,你的代码在我的锻炼示例中完美运行

我的路线

$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

    把它放在下面

    重写引擎开启

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    重写规则 ^(.*)$ index.php/$1 [L]

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

当我删除我的 .htaccess 代码时,您的错误发生了

希望这会有所帮助:)

【讨论】:

【解决方案4】:

你的路线应该是这样的:

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

并确保您的 htaccess 文件存在并且有代码:

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

【讨论】:

    【解决方案5】:

    简单的你可以试试这个

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

    那么您可以在控制器中使用以下方法获取 ID,并且没有传入函数报告卡参数

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

    【讨论】:

    • 问题出在路由上。直接函数参数可以实现从url获取数据。
    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多