9

ここに新しい 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)、セキュリティがオンかオフかに関係なく機能するため、フォームまたはセキュリティ呼び出しを操作する必要があると思われます。

どんなアイデアや助けも大歓迎です。

4

1 に答える 1

1

問題は、要素が本質的に愚かなビューであることだと思います-それらはモデルについて知ることを意図していません。自分でデータを渡す必要があります。

私は通常$this->set("authUser", $this->Auth->user());、認証を設定した後に AppController を配置します。これにより、現在ログインしているユーザーのデータを要素を含めてどこでも確認できます。

次のようにデータを直接渡すこともできます。

<?php echo $this->element("Users.login", array("user"=>$user));?>

また、あなたの言葉遣いについてははっきりしていませんが、ログインはロック解除されたアクションである必要があります。そうしないと、ユーザーは最初にどのようにログオンしますか?

于 2012-11-30T05:08:37.617 に答える