Question

J'ai un contrôleur d'utilisateurs avec une action appelée « Selfview » il ressemble à ceci: ( users_controller.php )

function selfView() {
  $user = $this->User->find('first', array('conditions' => array('User.id' => $this->Auth->user('id'))));
  $formms = $this->Form->find('all', array('fields' => array('Form.id', 'Form.name'), 'recursive' => -1));
  $this->set(compact('user', 'formms'));
  $this->render('view');
}

Ceci rend une page de profil qui a une forme sur elle. Ceci est le premier formulaire rendu sur la page et il fonctionne très bien comme on peut s'y attendre.

Voir extrait de code: ( users / view.ctp )

<div id="passwordChange">
        <?php echo $form->create('User', array( 'action' =>'updatePass' ));?>
          <fieldset>
            <legend><?php __('Change Password');?></legend>
            <?php
              $options = array('type'=>'password', 'div' => array('class' => 'required'));
              echo $form->input(__('old_password', true), $options);

              $options = array('div' => array('class' => 'required'), 'error' => array('confirmPassword' => __('Passwords do not match please try again',true), 'noempty' => __('Please provide a password',true)));
              echo $form->input(__('password', true), $options);

              $options = array('type'=>'password', 'div' => array('class' => 'required'));
              echo $form->input(__('confirmation_password', true), $options);

              echo $form->hidden('User.id', array('value' => $user['User']['id']));
            ?>
          </fieldset>
        <?php echo $ajax->submit(__('Change Password', true), array('url' => array('controller' => 'users', 'action' => 'updatePass'),
                   'update' => 'storage', 
                   'complete' => '$("#UserUpdatePassForm input[type=password]").val(""); '));
    $form->end();?>  
                    <a href="#">Cancel</a> 
      </div>

HTML qui est produit sous forme " users / view.ctp ":

<form action="/high-school-app/users/updatePass" method="post" id="UserUpdatePassForm">
  <fieldset style="display: none;">
    <input type="hidden" value="POST" name="_method">
  </fieldset>
  <fieldset>
    <legend>Change Password</legend>
    <div class="required">
      <label for="UserOldPassword">Old Password</label>
      <input type="password" id="UserOldPassword" value="" name="data[User][old_password]">
    </div>
    <div class="required required">
      <label for="UserPassword">Password</label>
      <input type="password" id="UserPassword" value="" name="data[User][password]">
    </div><div class="required required">
      <label for="UserConfirmationPassword">Confirmation Password</label>
      <input type="password" id="UserConfirmationPassword" value="" name="data[User][confirmation_password]">
    </div>
    <input type="hidden" id="UserId" value="" name="data[User][id]">
  </fieldset>
  <div class="submit">
    <input type="submit" onclick="return false;" id="submit2026598409" value="Change Password" update="storage">
  </div>
  <script type="text/javascript">
  //&lt;![CDATA[
  jQuery('#submit2026598409').click( function() { jQuery('#submit2026598409').parents('form').ajaxSubmit({beforeSend:function(request) {request.setRequestHeader('X-Update', 'storage');}, complete:function(request, textStatus) {$("#UserUpdatePassForm input[type=password]").val(""); }, success:function(data, textStatus) {jQuery('#storage').html(data);}, async:true, type:'post', url:'/high-school-app/users/updatePass'}); return false;});
  //]]&gt;
  </script> 
  <a href="#">Cancel</a> 
</form>

Alors je l'appelle et l'élément qui rend aussi une forme. ( users / view.ctp )

echo $this->element('my_apps' , array('applications' => $applications));  

Et puis c'est là où tout va mal. Peu importe ce que j'essaie je ne peux pas obtenir ce deuxième formulaire pour imprimer correctement. La partie centrale de la forme imprimera, mais pas les balises d'ouverture et de fermeture. Sans eux la forme ne sert à rien pour moi. A ce stade, et je ne veux vraiment pas l'écrire à la main.

Ceci est le code dans mon élément que je suis en train d'utiliser la sortie de la forme ( éléments / my_apps.ctp ):

<?php echo $form->create('Applications', array( 'url' => array('controller' => 'applications', 'action' => 'assign',  'id' => null))); ?>
      <fieldset>
        <legend><?php __('Assign Application to User');?></legend>
        <?php
          $options = array('--' => __('Select One',true), 'test' => 'test', 'test2' => 'test2');
          echo $form->label('Application.form_id', __('Form Name',true).":");
          echo $form->select('Application.form_id', $options, $selected = '--');

          echo $form->hidden('Application.user_id', array('value' => $user['User']['id']));
        ?>
      </fieldset>
<?php echo $form->end(__('Assign', true));?>

est ce que " éléments / my_apps.ctp " imprime sur:

<fieldset style="display: none;">
  <input type="hidden" value="POST" name="_method">
</fieldset>
<fieldset>
  <legend>Assign Application to User</legend>
  <label for="ApplicationFormId">Form Name:</label>
  <select id="ApplicationFormId" name="data[Application][form_id]">
    <option value=""></option>
    <option selected="selected" value="--">Select One</option>
    <option value="test">test</option>
    <option value="test2">test2</option>
  </select>
  <input type="hidden" id="ApplicationUserId" value="" name="data[Application][user_id]">
</fieldset>
<div class="submit">
  <input type="submit" value="Assign">
</div>

PAS Imprimer les balises d'ouverture et de fermeture qui devrait être quelque chose comme ceci:

<form action="/high-school-app/applications/assign" method="post" id="ApplicationAssignForm">
 .....
 .....
</form>

Toutes les idées? Quelque chose que je devrais essayer de faire pour le débogage serait utile.

Mise à jour:

Je viens d'essayer witting le code à la main et même qui est dépouillé. Y at-il une sorte d'aller post-traitement? Pourrait-il être responsable de la suppression de mes balises form?

Était-ce utile?

La solution

Je ne vois encore rien de mal, mais puis-je suggérer que, pour votre santé mentale, vous pouvez soit utiliser un autre nom pour la $options variable dans la première forme, ou mieux encore, écrivez la ligne de tableau. Il est plus fréquent de voir $options utilisé pour transmettre les choix de sélection que vous avez fait dans la deuxième forme. C'est à dire. économiser $ pour les options 'options'.

Dans votre selfView() fonction vous ne semblez pas attribuer des valeurs à applications et formms.

Ma préférence personnelle est d'écrire ceci:

<?php echo $form->submit(__('Assign', true));
      echo $form->end();?>

comme ceci:

<?php echo $form->end(__('Assign', true)) ?>

Je pense que cela rend le code un peu plus lisible.

Autres conseils

Dans votre première forme ne sont pas votre faisant écho $ form-> end () de sorte que la forme ne se ferme pas correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top