Frage

So habe ich eine Benutzer-Controller mit einer Aktion namens „ Eigenbild “ es sieht wie folgt aus: ( 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');
}

Dies macht eine Profilseite, die auf sie eine Form hat. Dies ist das erste Formular auf der Seite gerendert und es funktioniert gut, wie man erwarten würde.

Sehen Sie Codeausschnitt: ( Benutzer / 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 , das produziert Form " Benutzer / 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>

Dann rufe ich und Element, das auch eine Form übertragen wird. ( Benutzer / view.ctp )

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

Und dann ist dies, wo alles schief geht. Egal, was ich versuche, ich kann nicht diese zweite Form erhalten richtig auszudrucken. Der mittlere Teil des Formulars ausdrucken wird, einfach nicht das Öffnen und Schließen-Tags. Mit aus ihnen ist die Form für mich nutzlos. An diesem Punkt, und ich es wirklich nicht will, mit der Hand schreiben.

Dies ist der Code in meinem Elemente, dass ich Verwendung zur Ausgabe versuchen die Form ( -Elemente / 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));?>

das ist, was " -Elemente / my_apps.ctp " druckt:

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

Es nicht Drucken der das Öffnen und Schließen-Tags, die in etwa so sein sollte:

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

Irgendwelche Ideen? Etwas, das ich versuchen sollte, zu debuggen zu tun, wäre hilfreich.

Update:

Ich habe gerade versucht witting den Code in der Hand und auch die gezupft wird. Gibt es irgendeine Art von Post-Processing geht? Könnte sein, dass zum Entfernen von meiner Form Tags verantwortlich sein?

War es hilfreich?

Lösung

Ich kann nichts falsch sehe noch nicht, aber kann ich vorschlagen, dass für Ihre geistige Gesundheit, Sie entweder einen anderen Namen für den Variable $options in der ersten Form verwenden, oder noch besser, schreiben Sie die Inline-Array. Es ist häufiger verwendet, um zu sehen $options die Auswahlmöglichkeiten passieren, wie Sie in der zweiten Form getan haben. D. h sparen $ Optionen für 'Optionen'.

In Ihrer Funktion selfView() Sie scheinen nicht zu assign Werte applications & formms.

Meine persönliche Präferenz ist, dies zu schreiben:

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

wie folgt aus:

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

Ich denke, es ist der Code besser lesbar leicht.

Andere Tipps

In Ihrem ersten Formular hallen nicht $ form-> end (), so dass die Form ist nicht richtig geschlossen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top