如何使用CodeIgniter在不同状态下从控制器中的同一函数调用两个视图

tcbh2hod  于 2023-05-27  发布在  其他
关注(0)|答案(2)|浏览(165)

我想从控制器中的同一个函数(函数索引)调用两个不同的视图。
我传递了一个参数(一个id)到index函数,当id的值为null时,我想显示所有的blog列表,如果我得到一个id,那么我只想显示一个id在url中的blog。
我成功地做到了这一点,但我得到了一个警告:
遇到PHP错误
严重性:警告
Message:Missing argument 1 for blog::index()
文件名:controllers/blog.php
行号:5
我该如何解决这个问题?
我的代码:

class blog extends CI_Controller{

function index($url)
{
    $this->load->model('blog_model');
    $url = $this->uri->segment(1);
    $data['blog_details'] = $this->blog_model->getBlog($url);
    $data['blog_comment'] = $this->blog_model->getComment($url);
    $data['blog_all'] = $this->blog_model->getBlogAll();
    $this->load->view('blog',$data);
} }
x6yk4ghg

x6yk4ghg1#

我认为你最好为你期望得到的变量定义一个默认值:

function index($url = NULL){

这将使您的函数将$url设置为NULL,以防URL中没有参数传递给函数。

function index($url = NULL)
{
    $this->load->model('blog_model');
    //$url = $this->uri->segment(1);
    $data['blog_details'] = $this->blog_model->getBlog($url);
    $data['blog_comment'] = $this->blog_model->getComment($url);
    $data['blog_all'] = $this->blog_model->getBlogAll();
    $this->load->view('blog',$data);
}
r3i60tvu

r3i60tvu2#

首先,你必须检查get id是否为null,然后你必须在其上加载视图。
示例:

function index($url)
    {
        $this->load->model('blog_model');
        $url = $this->uri->segment(1);
        if($url == null){
          $view = 'blog';
          $data['blog_all'] = $this->blog_model->getBlogAll();
        }else{
          $view = 'blog_details';
          $data['blog_details'] = $this->blog_model->getBlog($url);
          $data['blog_comment'] = $this->blog_model->getComment($url);
        }
        $this->load->view($view,$data);
    }

但是在routes.php中有一个更好的方法,为每个路由声明不同的方法。

$route['blog/:any'] = 'blogs/blog_details';
$route['blogs'] = 'blogs/all_blogs';

相关问题