вызов echo $ this-> action ('panLogin', 'user') и $ this-> action ('panRegister', 'user') для одного и того же сценария - PullRequest
0 голосов
/ 14 февраля 2012

У меня проблема, я пытаюсь отобразить 2 формы (войти и зарегистрироваться) на одном макете scrpt (header.phtml), каждый раз, когда я отправляю одну из форм, оба действия для контроллера запускаются, и яЯ не уверен, как это исправить.

Формы хорошо отображаются в макете, однако, когда вы нажимаете «Логин» или «Зарегистрироваться» на формах, код запускается как в «логин», так и в «регистр»actions.

фрагмент сценария макета заголовка: -

 <div class="left">
   <h1>Already a member? <br>Then Login!</h1>
     <?php
        echo $this->action('panlogin', 'user');
      ?>
 </div>
 <div class="left right">
 <h1>Not a member yet? <br>Get Registered!</h1>
    <?php
        echo $this->action('panregister', 'user');
    ?>       
 </div>

сценарии действий (phtmls)

panregister.phtml

<div id="pan-register">
   <?php
     $this->registerForm->setAction($this->url);
     echo $this->registerForm;
   ?>
</div>

panlogin.phtml

<div id="pan-login">
   <?php
      $this->loginForm->setAction($this->url);
    ?>
</div>

действия контроллера пользователя: -

    class Ajfit_UserController extends Zend_Controller_Action
    {
       protected $_loginForm;

       protected $_registerForm;

       public function init()
       {       
          $this->_loginForm  = new Ajfit_Form_User_Login(array(
              'action' => '/user/login',
              'method' => 'post',
          ));
          $this->_registerForm = new \Ajfit\Form\User\Registration(array(
              'action' => '/user/register',
              'method' => 'post'
          ));
       }

       //REGISTER ACTIONS
       public function panregisterAction(){
           $this->registerAction();
       }

       public function registerAction(){
           $request = $this->_request;
           if ($this->_request->isPost()){
              $formData = $this->_request->getPost();
           }
           $this->view->registerForm = $this->_registerForm;
       }

       //LOGIN ACTIONS
       public function panloginAction(){
           $this->loginAction();
       }

      public function loginAction(){
         $request = $this->_request;
         if(!$auth->hasIdentity()){   
            if ($this->_request->isPost()){
               $formData = $this->_request->getPost();
            }
         }
         $this->view->loginForm = $this->_loginForm;
      }
   }

Пожалуйста, кто-нибудь, имеющий немного больше знаний о действии ('act', 'cont');?> код с помощью скрипта макета поможет мне с этой проблемой.

Спасибо

Андрей

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Несмотря на то, что Дэвид прав, когда речь идет о лучших практиках, я просто добавил еще одно утверждение if () Вроде как:

if ($this->getRequest()->isPost()) {
                if ($this->getRequest()->getPost('submit') == 'OK') {

Просто убедитесь, что ваш ярлык отправки уникален.
В конце концов я перейду к рефакторингу всех тех действий, которые я построил на ранних этапах обучения, хотя сейчас они работают.

Теперь, чтобы быть любопытным :)
Я заметил: $formData = $this->_request->getPost(); пока это работает, если вы наложите какие-либо фильтры на свои формы, получая данные таким образом, обходите ваши фильтры. Чтобы получить отфильтрованные значения, используйте $formData = $this->getValues();

из руководства ZF

Объект запроса ПОЛУЧЕНИЕ И ПОЧТА Данные
Будьте осторожны при доступе к данным из объекта запроса, поскольку они никак не фильтруются. Роутер и Диспетчер проверяет и фильтрует данные для использования со своими задачами, но оставить данные нетронутыми в объекте запроса.

Из Zend_Form Quickstart

Предполагая, что ваши проверки пройдены, теперь вы можете получить отфильтрованный значения:

$values = $form->getValues();

0 голосов
/ 15 февраля 2012

Не отображать действия в макете.Просто визуализируйте формы:

<div class="left">
   <h1>Already a member? <br>Then Login!</h1>
     <?php
        echo new \Ajfit\Form\User\Login(array(
          'action' => '/user/login',
          'method' => 'post'
      ));
      ?>
 </div>
 <div class="left right">
 <h1>Not a member yet? <br>Get Registered!</h1>
     <?php
        echo new \Ajfit\Form\User\Registration(array(
          'action' => '/user/register',
          'method' => 'post'
      ));
      ?>
 </div>

Затем, какая бы форма ни использовалась, отправит свое собственное действие.

...