我是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的了解不多。目前,我正在使用最新版本。
答案 0 :(得分:1)
$csrf
在视图上将不是变量。
name
和hash
。
如果您想拥有$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()
));