2013-07-20 120 views
-1

我有两种类型的视图可以显示用户:登录页面和所有其他页面,您可以在其中看到菜单。 如果您未登录,则不会看到菜单。未定义的变量 - 如何检查var是否存在

我现在想要实现的是使用1个模板,其中页眉和页脚被自动加载,并且内容是动态的,取决于哪个控制器被称为视图。

此刻我在登录控制器

$data['content'] = 'login_view'; 
$data['menu'] = 'nomenu'; 
$this->load->view('templates/template', $data); 

有这个,这是我在控制器

$data['content'] = 'profile_view'; 
$this->load->view('templates/template', $data); 

登录我喜欢,你可以看到我赢了” t正在发送$data['menu']

和我的视图是像这样:

<?php $this->load->view('templates/header'); ?> 
<?php 
    if($menu == 'nomenu'){ 

    } 
    else{ 
     $this->load->view($menu); 
    } 
?> 
<?php $this->load->view($content); ?> 
<?php $this->load->view('templates/footer'); ?> 

这里的问题是,我的登录控制器

A PHP Error was encountered 
Severity: Notice 

Message: Undefined variable: menu 

Filename: templates/template.php 

Line Number: 7 

有没有一种方法来检查,如果我的$菜单的存在,因为我只被发送$菜单如果它是登录视图,否则我不会。

+0

不检查变量是否“未定义”。只要确保它*不可* * - 根据需要使用适当的默认/标记以确保它是“定义的”。这最终会创建更干净的代码。考虑到许多编程语言禁止使用“未定义”变量,并且在试图这样做的代码中将其视为*错误*。 – user2246674

+0

我知道这是一个可能的解决方案,但是我总是必须在每个控制器中发送'data [menu]',但是我只想在它从登录控制器发送时发送它 – mXX

+0

这就是我要做的!不要使用“未定义”的变量!另一方面,我发现可以使用带有可选键的地图集合。 – user2246674

回答

0

其简单的只是用isset检查变量定义或不

<?php $this->load->view('templates/header'); ?> 
<?php 
    if(isset($menu) && $menu== 'nomenu'){ 

    } 
    else{ 
     $this->load->view($menu); 
    } 
?> 
<?php $this->load->view($content); ?> 
<?php $this->load->view('templates/footer'); ?> 

你可能把load你如果检查,因为如果没有设置$菜单,然后在其他情况下,它会火未定义的错误,你应该做这样的

<?php $this->load->view('templates/header'); ?> 
<?php 
    if(isset($menu) && $menu== 'nomenu'){ 
    $this->load->view($menu); 
    } 
    else{ 
     $this->load->view('load other view'); 
    } 
?> 
<?php $this->load->view($content); ?> 
<?php $this->load->view('templates/footer'); ?> 
+0

这仍然给我'未定义变量:菜单' – mXX

+0

请参阅我更新的答案是因为你的其他情况 –

+0

没错。感谢您指出这一点 – mXX

0

或者送$数据[ '菜单'] = FALSE;在第二个控制器上

+0

不能这样做,因为以后会有更多的控制器,然后我必须在每个控制器中添加它 – mXX

相关问题