控制器:
public function home(){
$data['page_title'] = 'Home';
$data['navbar_content'] = $this->model->get($var);
$data['page_content'] = $this->model->get($var1);
$this->load->view('template/header');
$this->load->view('template/navbar');
$this->load->view('pages/home');
$this->load->view('template/footer');
}
使用上面的示例代码,由于codeigniter仅允许将变量/数据通过数组或对象从控制器传递到视图,那么传递数据的"正确"方法是什么?
我可以在加载标头时简单地传递数据,一切仍然可以正常进行。
$this->load->view('template/header', $data);
$this->load->view('template/navbar');
$this->load->view('pages/home');
$this->load->view('template/footer');
但这对我来说似乎不是"正确的",例如,我想我希望代码中的内容清楚:
$this->load->view('template/header', $title);
$this->load->view('template/navbar', $navbar_content);
$this->load->view('pages/home', $page_content);
$this->load->view('template/footer');
上面的内容很明确,并且与要传递的数据有所区别。
但是由于我无法做到这一点,是否有一种"正确"的方式来做到这一点? 还是我想得太多?
我忽略了提及,我可以简单地将2个数组传递给视图。 我认为这首先是错误的,因为我将尽力使2个数组通过,以便我可以将单个字符串变量传递给我的标题页。
当然,当我向导航栏传递更多数据时,这对我来说是有意义的。
根据文档,这是正确的方法:
https://codeigniter.com/userguide3/general/views.html
数据通过视图加载方法的第二个参数中的数组或对象从控制器传递到视图。
您还应该注意:
Codeigniter:构造部分视图的最佳方法
您应该按层次结构构建视图。
$this->load->view('template/header', ["title" => $title]);
$this->load->view('template/navbar', ["navbar_content" => $navbar_content]);
$this->load->view('pages/home', ["page_content" => $page_content]);
$this->load->view('template/footer');
但是我需要将数据传递到标头。就是这样,生病了可能需要将数据传递给我的导航栏。如果我将数据传递到两个加载语句,这将是多余的吗?对我来说,制作2个数组也没有意义,所以我可以这样做?
因此,将其作为array或object传递。
您可以编辑答案并告诉我如何做吗?
您要将同一个data传递给多个views吗?
我的问题是,我可以将所有需要的数据简单地放入一个数组中,然后将该数组传递到第一个加载语句中(在本例中为标头),并且所有其他加载后的视图都可以使用它。同一页。由于我需要将1个字符串变量作为标题传递给我的标题页,因此我将其传递到了那里,因为如果我在页面内容中传递了所有数据,则标题视图中的php代码会出错,因为标题首先在内容之前加载数据在哪里传递。我也想清楚地将数据传递给与其相关的视图,例如
我的标题数据我希望它传递给我的标题加载语句,将导航栏内容传递给导航栏加载语句,并将页面内容传递给我的页面加载语句。而不是单个常规数据数组,在不查看相关视图代码的情况下,它在我的控制器代码中无法完全读取。
因此,为这些视图传递具有相关数据的多个数组。如果您暂时没有更多数据,它们可以是一个元素的数组。
每当我加载单个网页时,我可能都必须这样做。如果是这样,对我来说只使用一个数组并将其传递给标头而不是像我想要的那样寻求可读性对我有意义吗?
对于您要寻找的东西,没有绝对的答案,您迟早必须制造耐火材料。
那就选择可读性路线。这也与我编写更具可读性的代码的计划相吻合,其他内容稍后发布。婴儿的步骤。
CodeIgniter将数据从控制器传递到视图。
您需要将$data传递给视图。
您将传递一个数组,其键为字符串或什至数组(也为多维数组)。
因此,您需要将其传递给使用$data的每个视图。
$this->load->view('template/header', $data);
$this->load->view('template/navbar', $data);
$this->load->view('pages/home', $data);
$this->load->view('template/footer', $data);
并且在您的视图中,您可以使用键访问$data。
例如:
如果您的数据是
$data['header_banner'] = 'Header Banner';
您认为可以通过以下方式访问此值:
echo $header_banner;
观察到$data中的键,您只需要添加一个$即可访问该变量。
PHP内置函数extract()
我明白了,但是只需将$ data一次传递给标头就足够了,并且所有其他视图都可以访问它,因为它都在同一页面上呈现并且标头首先呈现,因此在加载其他视图时数据已经存在。即时通讯刚刚意识到也许即时通讯大惊小怪。
好问题!!!实际上,您并不是在一个语句中加载所有视图。您将分别加载视图,因此每次都需要传递数据以进行查看。
我的意思是,我把需要传递给视图的所有数据放入$ data内的1个数组中,然后将$ data传递给我的load header语句,就像上面的问题一样,我把它放在那里我的视图可以使用从标头传递的数据,因为它们都加载在同一页面上,并且标头先加载。