Pregunta

Así que tengo un controlador de usuarios con una acción llamada " SELFVIEW " Parece que este: ( 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');
}

Esto hace que una página de perfil que tiene una forma en él. Este es el primero forma dictada en la página y funciona muy bien como era de esperar.

Ver fragmento de código: ( usuarios / 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 esta forma se produce " usuarios / 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>

A continuación, llamo y el elemento que también hará que una forma. ( usuarios / view.ctp )

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

Y entonces aquí es donde todo va mal. No importa lo que intento no puedo conseguir esta segunda forma de imprimir correctamente. La parte media de la forma imprimirá, no sólo las etiquetas de apertura y cierre. Sin ellos la forma es inútil para mí. En este punto y realmente no quiero escribirlo a mano.

Este es el código en mi elemento que yo estoy tratando de utilizar a la salida de la forma ( Los elementos / 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));?>

Esto es lo que " Los elementos / 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>

no Imprimir las etiquetas de apertura y cierre que debe ser algo como esto:

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

¿Alguna idea? Algo que yo debería tratar de hacer para depuración sería de gran ayuda.

Actualización:

Sólo traté witting el código en la mano e incluso que es se rompan. ¿Hay algún tipo de post-procesamiento de ir? Podría ser responsable de la eliminación de mis etiquetas de formulario?

¿Fue útil?

Solución

No puedo ver nada malo todavía, pero puedo sugerir que para su salud mental, ya sea que utiliza un nombre diferente para el $options variable en la primera forma, o mejor aún, escribir la línea matriz. Es más común ver $options utiliza para pasar las opciones de selección como lo han hecho en la segunda forma. Es decir. ahorrar $ opciones de 'opciones'.

En su función selfView() usted no se presenta para asignar valores a applications y formms.

Mi preferencia personal es escribir esto:

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

como esto:

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

Creo que hace que el código un poco más legible.

Otros consejos

En su primera forma tu no se están haciendo eco $ form-> end () por lo que el formulario no se cierra correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top