代码点火器PHP错误 - 消息:使用未定义的常量

时间:2014-04-23 08:38:31

标签: php codeigniter

我在我的主视图中使用我的菜单加载不同的内容,代码工作正常但是我有这个错误消息。

A PHP Error was encountered
Severity: Notice
Message: Use of undefined constant users - assumed 'users'
Filename: views/welcome.php
Line Number: 53
A PHP Error was encountered
Severity: Notice
Message: Use of undefined constant stores - assumed 'stores'
Filename: views/welcome.php
Line Number: 56
A PHP Error was encountered
Severity: Notice
Message: Use of undefined constant notes - assumed 'notes'
Filename: views/welcome.php
Line Number: 59

这是我的观点

            <div id="nav">
            <div id="imagesBox">
                <a href="index.php?section=users"><img class="imagesLeft" src="images/usuario_on.png"></a>
                <a href="index.php?section=stores"><img class="imagesLeft" src="images/tienda_on.png"></a>
                <a href="index.php?section=notes"><img class="imagesLeft" src="images/aviso_on.png"></a>
        </div>
        <?php
        $section; $users=0;
        switch ($_GET['section']) {
        case users:
            $this->load->view('users'); 
            break;
        case stores:
            $this->load->view('stores'); 
            break;
        case notes:
            $this->load->view('notes'); 
            break;
    }

?>
    </div>

这是我的控制器(我正在使用tank_auth并且正常工作)

class Welcome extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        $this->load->helper('url');
        $this->load->library('tank_auth');
    }
    function index()
    {
        if (!$this->tank_auth->is_logged_in()) {
            redirect('/auth/login/');
        } else {
            $data['user_id']    = $this->tank_auth->get_user_id();
            $data['username']   = $this->tank_auth->get_username();
            $this->load->view('welcome', $data);
        }
    }
}

我没有找到解决此问题的最佳方法,这有点奇怪,因为代码的工作方式与我想要的一样。

3 个答案:

答案 0 :(得分:3)

使用以下内容替换您的视图代码:

  <?php
        $section; $users=0;
        switch ($_GET['section']) {
        case "users":
            $this->load->view('users'); 
            break;
        case "stores":
            $this->load->view('stores'); 
            break;
        case "notes":
            $this->load->view('notes'); 
            break;
    }

必须在引号中定义字符串。您已在案例部分中使用的字符串中留下引号。

Reference

答案 1 :(得分:1)

你需要在case语句中添加引号,否则它们将被视为常量,如果它们未被定义,则php假设它们是字符串(这就是为什么代码可以工作,但会生成通知)。

case 'users':
  ..
case 'stores':
  ..
case 'notes':
  ..

由于$_GET['section']的值对应view,因此您可以使用简单的白名单简化代码:

if (in_array($_GET['section'], array('users', 'stores', 'notes')) {
  $this->load->view($_GET['section']);
}

答案 2 :(得分:1)

由于一个愚蠢的错误,可能会发生此错误。确保您为控制器redirect('/auth');创建了文件。也许您已经编写了redirect('/auth/login/');但尚未为控制器 auth 创建文件。