Внешний контроллер формы CakePHP

#php #cakephp

#php #cakephp

Вопрос:

У меня в заголовке есть форма входа, которая взаимодействует с моим users_controller, но сама форма отсутствует в представлении, генерируемом контроллером пользователей, поэтому я получаю две проблемы

1.) Поле пароля не обрабатывается как поле пароля, а является обычным текстовым полем

2.) При отправке формы она просто перенаправляет на действие входа в систему

Вот код, и он используется как в представлении входа, так и в моем заголовке (поэтому я знаю, что это работает):

 <?php echo $this->Form->create(null, array('id' => 'loginform', 'type' => 'post',
        'url' => array('controller' => 'users', 'action' => 'login'))); ?>

<fieldset id="login">

    <ul class="clearfix">
        <li id="li-username">
            <?php echo $this->Form->input('username', array('label'=>false,'placeholder'=>'Username or email address')); ?>
        </li>
        <li id="li-password">
            <?php echo $this->Form->input('password', array('label'=>false,'placeholder'=>'Password')); ?>
            <span id="iforgot"><?php echo $this->Html->link('?', 
            array('controller' => 'users', 'action' => 'forgotpassword'),  array('title' => 'Forgot your password?')); ?></span>
        </li>
        <li id="li-submit">
            <button type="submit" title="Log in">Log in amp;#9658;</button>
        </li>
    </ul>

</fieldset>

<?php echo $this->Form->end(); ?>
  

Комментарии:

1. jquery с ajax лучше всего подходит для выполнения этого.

Ответ №1:

Почему не меняется

Форма-> создать(null,…

Для

Форма-> создать(‘User’,…

в противном случае измените

Форма-> ввод(‘имя пользователя’,…

Для

Форма-> ввод(‘User.username’,…

Комментарии:

1. У меня возникла проблема, когда другие модели переопределяли форму входа в моем заголовке. выполнение Form-> input(‘User.username’) вместо Form-> input(‘username’) устранило мою проблему. Спасибо, что ведете меня в правильном направлении!

Ответ №2:

  1. Вы можете использовать type = ‘пароль’

 
echo $this->Form->input('password', array('label'=>false, 'type' => 'password', 'placeholder'=>'Password')); 
  

  1. Вы указали массив (‘controller’ => ‘users’, ‘action’ => ‘login’) в вашем операторе $this-> Form-> create(). Таким образом, форма отправляется в «/ users/login»

Если вы не хотите отправлять форму в ‘/users /login’, вы можете использовать AJAX для выполнения входа.

Надеюсь, это ответит на ваши запросы.