use*_*992 8 forms security plugins cakephp
新的CakePHP用户在这里.我一直无法找到解决这个问题的方法.
我想在现有页面中嵌入一个登录表单作为元素.我正在使用CakeDC用户插件.目标是在页面中嵌入登录表单,然后在登录时更新页面上的某些内容而不刷新页面.在我们开始担心AJAX和SecurityComponent之前,我想至少将表单作为元素嵌入到其他页面中.
对于初学者,我试图直接将'/Views/Users/login.ctp'的内容复制并粘贴到元素中.这给了我一个'未定义变量'$ Model"'的警告,所以我把模型硬编码为'Users.User'(因为我认为访问插件中的模型的符号是'plugin.model'就像他们说的那样手册).这失败了错误消息错误:找不到Users.usersController.
因此,我调整了表单,将"User"作为模型而不是$ model,现在请求被黑洞化了.如果我禁用安全组件,我可以成功登录.这不是一个令人满意的解决方案(我的意思是,我可以选择不验证表单或将'login'定义为解锁操作,但如果我这样做,那么我可能也没有启用安全性登录,对吧? ).
以下是app/Plugin/Users/View/Elements/login.ctp的代码:
<div class="users index">
<h2><?php echo __d('users', 'Login'); ?></h2>
<fieldset>
<?php
echo $this->Form->create('User', array(
'action' => 'login',
'id' => 'LoginForm'));
echo $this->Form->input('User.email', array(
'label' => __d('users', 'Email')));
echo $this->Form->input('User.password', array(
'label' => __d('users', 'Password')));
echo '<p>' . __d('users', 'Remember Me') . $this->Form->checkbox('remember_me') . '</p>';
echo '<p>' . $this->Html->link(__d('users', 'I forgot my password'), array('action' => 'reset_password')) . '</p>';
echo $this->Form->end(__d('users', 'Submit'));
?>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
以下是调用元素的View的代码:
<div id="loginform">
<?php echo $this->element('Users.login'); ?>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我将元素代码复制并粘贴到View(例如,in apps/Plugin/Users/View/Users/login.ctp)中,无论安全性是打开还是关闭,它都可以正常工作,因此我怀疑是否需要对表单或安全性调用进行一些修改.
任何想法或帮助将不胜感激.
我认为问题在于元素本质上是愚蠢的视图 - 它们并不意味着了解模型。您必须自己传递数据。
我通常$this->set("authUser", $this->Auth->user());在设置身份验证后放入 AppController,这让我可以在任何地方检查当前登录用户的数据,包括元素。
您也可以直接传递数据,如下所示:
<?php echo $this->element("Users.login", array("user"=>$user));?>
另外,我不太清楚你的措辞,但登录应该是解锁操作,否则用户将如何首次登录?