ここに新しい CakePHP ユーザーがいます。この問題の解決策を見つけることができませんでした。
ログイン フォームを要素として既存のページに埋め込みたいと考えています。CakeDC ユーザープラグインを使用しています。目標は、ログイン フォームをページに埋め込み、ログイン時に、ページを更新せずにページの一部のコンテンツを更新することです。AJAX と SecurityComponent について考える前に、少なくとも他のページにフォームを要素として埋め込んでおきたいと思います。
手始めに、「/Views/Users/login.ctp」の内容を要素に直接コピーして貼り付けようとしました。これにより、「未定義の変数 "$Model"」という警告が表示されたので、モデルを「Users.User」としてハードコーディングしました (プラグイン内のモデルにアクセスするための表記法は、彼らが言ったように「plugin.model」であると想定したためです)これは、エラー メッセージ Error: Users.usersController could not be found で失敗しました。
そこで、$model の代わりに「User」をモデルとして取るようにフォームを調整したところ、リクエストがブラックホール化されました。セキュリティ コンポーネントを無効にすると、正常にログインできます。これは完全に満足のいく解決策ではありません (つまり、フォームを検証しないか、「ログイン」をロック解除されたアクションとして定義することを選択できますが、そうすると、ログインに対してセキュリティを有効にしていない可能性がありますよね? )。
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>
以下は、要素を呼び出しているビューのコードです。
<div id="loginform">
<?php echo $this->element('Users.login'); ?>
</div>
要素コードをコピーしてビューに貼り付けると (たとえば、apps/Plugin/Users/View/Users/login.ctp
)、セキュリティがオンかオフかに関係なく機能するため、フォームまたはセキュリティ呼び出しを操作する必要があると思われます。
どんなアイデアや助けも大歓迎です。