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

Php 尝试从控制器传递数据时,Codeigniter上的未定义变量,php,codeigniter,codeigniter-3,Php,Codeigniter,Codeigniter 3,我是Codeigniter的新手。我尝试将一些数据传递到视图中。我有一条这样的路线: $route['accounts/(:any)'] = 'accounts/$1'; <input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" /> 在我的Account类中,我有如下注册函数: public function register() { $

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

$route['accounts/(:any)'] = 'accounts/$1';
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
在我的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,如下所示:

$route['accounts/(:any)'] = 'accounts/$1';
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
好像我的注册表不识别$csrf。我真的不知道是什么原因导致了它,我通常使用树枝,因为它是编码者,所以我对它不太了解。目前我使用的是最新版本

因此,您可以看到$data在视图中不可用,但$title、$heading和$message是可用的

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

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

$csrf将不是视图上的变量

名称和哈希将被删除

如果您想要$csrf,则需要此数据阵列:

$csrf  = array(
    'csrf'=> array(
        'name' => $this->security->get_csrf_token_name(),
        'hash' => $this->security->get_csrf_hash()
    )
);
但是,如果使用helper form_open,则不需要编写自己的隐藏输入


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

现在仍然存在相同的问题,它说未定义变量:数据传递给$this->load->view的变量对视图永远不可用。它的内容被外推到新的变量中以供使用。尝试使用$name和$hash。还有一件事,您知道如何检查此csrf是否有效吗?它应该自动为您处理-。您的AJAX表单需要将其传递给您的应用程序,但实际验证会自动进行-只要您发送post请求。我不使用form_open,因为我使用AJAX验证和发送数据。这就是为什么我需要手动检查的原因。我明白了。好的,我会用它看起来更有效。顺便说一下,如果我想验证get_csrf_token_name和get_csrf_hash,并将两者与我刚才写的输入进行比较,对吗?配置中是否启用了CSFR?如果是,它将自动验证。
$this->load->view('auth/register', array(
   'name' => $this->security->get_csrf_token_name(),
   'hash' => $this->security->get_csrf_hash()
));
$csrf  = array(
    'csrf'=> array(
        'name' => $this->security->get_csrf_token_name(),
        'hash' => $this->security->get_csrf_hash()
    )
);