2010-02-17 3 views
1

donc j'ai un contrôleur d'utilisateurs avec une action appelée "Selfview" il ressemble à ceci: (users_controller.php)CakePHP FormHelper pas sortie tags "<form>"

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'); 
} 

Ce profil rend page qui a une forme sur elle. C'est le premier formulaire rendu sur la page et il fonctionne très bien que vous attendez.

Voir extrait de code: (utilisateurs/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> 

le HTML qui est produit sous forme "utilisateurs/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> 

Puis j'appelle et élément qui rendra aussi une forme. (utilisateurs/view.ctp)

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

Et 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 du formulaire sera imprimée, mais pas les balises d'ouverture et de fermeture. Sans eux la forme est inutile pour moi. À ce stade et je ne veux vraiment pas l'écrire à la main.

C'est le code dans mon élément que je suis en train d'utiliser pour produire 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));?> 

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

<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> 

Il WILL NOT 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> 

Des idées? Quelque chose que je devrais essayer de faire pour déboguer serait utile.

Mise à jour:

Je viens d'essayer witting le code à la main et même qui est dépouillé. Y a-t-il une sorte de post-traitement? Cela pourrait-il être responsable de la suppression de mes étiquettes de formulaire?

+0

Il ne devrait pas y avoir de post-traitement, selon ce que vous entendez par "écrire à la main". Avez-vous juste le code HTML dans le fichier CTP? Parce que cela ne devrait certainement pas être retiré. Souhaitez-vous mettre un lien sur pastebin avec votre fichier de mise en page et votre fichier de modèle pour moi? J'ai déjà eu ce problème, mais je ne me souviens pas comment je l'ai résolu. Voir vos fichiers de disposition/affichage peut vous aider. –

+0

Désolé, d'Allemagne. J'ai essayé d'écrire le html dans le fichier ctp et il a encore retiré les balises "form". voici un lien pastebin: http://pastebin.com/m5e68275d s'il y a quelque chose d'autre qui pourrait aider à me le faire savoir. Encore une fois désolé pour le retard. – MrDevin

+0

donc pas de réponses Je juet fait une requête ajax pour le formulaire et l'affiche dans une fenêtre modale. fonctionne très bien. – MrDevin

Répondre

0

Je ne vois encore rien de mal, mais je peux suggérer que pour votre santé mentale, vous utilisez un nom différent pour la variable $options dans le premier formulaire, ou mieux, écrivez le tableau en ligne. Il est plus commun de voir $options utilisé pour passer les choix de sélection que vous avez fait dans la deuxième forme. C'est à dire. enregistrer $ options pour 'options'.

Dans votre fonction selfView(), vous ne semblez pas affecter de valeurs à applications & 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.

+0

Merci pour les conseils sur la façon de rendre mon code plus lisible J'ai apporté quelques modifications pour vous incorporer des suggestions. – MrDevin

4

Dans votre première forme, vous ne faites pas écho à $ form-> end(), donc le formulaire ne se ferme pas correctement.

+0

Ceci devrait être marqué comme la bonne réponse. Si vous ne renvoyez pas l'expression $ form-> end(), le second formulaire ne s'affichera pas du tout. –

Questions connexes