尝试从控制器传递数据时,Codeigniter上的未定义变量

时间:2019-07-15 11:44:03

标签: php codeigniter codeigniter-3

我是Codeigniter的新手。我尝试将一些数据传递到视图中。我有一条这样的路线:

$route['accounts/(:any)'] = 'accounts/$1';

在我的Account类中,我具有如下注册功能:

public function register()
    {
        $csrf  = array(
            'name' => $this->security->get_csrf_token_name(),
            'hash' => $this->security->get_csrf_hash()
        );
        $this->load->view('partials/head');
        $this->load->view('partials/nav');
        $this->load->view('auth/register',$csrf);
        $this->load->view('partials/footer');
    }

然后在我的register.php中,尝试像这样打印$ crsf:

<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

当我访问在compro.xyz/accounts/register中的页面时,出现此错误:

A PHP Error was encountered
Severity: Notice

Message: Undefined variable: csrf

Filename: auth/register.php

Line Number: 13

Backtrace:

File: D:\xampp\htdocs\compro\application\views\auth\register.php
Line: 13
Function: _error_handler

File: D:\xampp\htdocs\compro\application\controllers\Accounts.php
Line: 19
Function: view

File: D:\xampp\htdocs\compro\index.php
Line: 315
Function: require_once

" value="
A PHP Error was encountered
Severity: Notice

Message: Undefined variable: csrf

Filename: auth/register.php

Line Number: 13

Backtrace:

File: D:\xampp\htdocs\compro\application\views\auth\register.php
Line: 13
Function: _error_handler

File: D:\xampp\htdocs\compro\application\controllers\Accounts.php
Line: 19
Function: view

File: D:\xampp\htdocs\compro\index.php
Line: 315
Function: require_once

" />

好像我的注册机无法识别$csrf。我真的不知道是什么原因造成的,我通常使用Twig,由于它对Codeiginter的了解不多。目前,我正在使用最新版本。

2 个答案:

答案 0 :(得分:1)

$csrf在视图上将不是变量。

namehash

如果您想拥有$csrf,则需要以下数据数组:

$csrf  = array(
    'csrf'=> array(
        'name' => $this->security->get_csrf_token_name(),
        'hash' => $this->security->get_csrf_hash()
    )
);

但是,如果您使用帮助器form_open,则无需隐藏自己的输入。

此外,您可以在视图内使用$this->security

答案 1 :(得分:0)

https://www.codeigniter.com/user_guide/general/views.html#adding-dynamic-data-to-the-view

$data = array(
        'title' => 'My Title',
        'heading' => 'My Heading',
        'message' => 'My Message'
);

$this->load->view('blogview', $data);

因此,您可以看到 $data在视图中不可用,但是$title$heading$message可用。 / p>

同样, $csrf在您的视图中将不可用,但是$name$hash将可用。为了清楚起见,将$csrf重命名为$data

$data  = array(
    'name' => $this->security->get_csrf_token_name(),
    'hash' => $this->security->get_csrf_hash()
);
$this->load->view('auth/register', $data);

编辑-编写和理解它的一种更简洁的方法是:

$this->load->view('auth/register', array(
   'name' => $this->security->get_csrf_token_name(),
   'hash' => $this->security->get_csrf_hash()
));