CakePHP'de FormHelper "
" çıkışı olmayan

2 Cevap php

So I have a users controller with an action called "selfView" it looks like this: (*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');
}

Bunun üzerinde bir forma sahip bir profil sayfası oluşturur. Bu sayfada hale first formudur ve beklediğiniz gibi gayet güzel çalışıyor.

View code snippet: (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 "users/view.ctp" şeklinde üretilmiş olduğu:

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

Then I call and element that will also render a form. (users/view.ctp)

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

Tüm yanlış nereye gittiğini ve o zaman bu. Ne olursa olsun ben denemek ne bu ikinci formun doğru yazdırmak için alınamıyor. Formun orta kısmı sadece açılış ve kapanış etiketleri değil, yazdıracaktır. Onları dışarı formu benim için işe yaramaz. Bu noktada ve ben gerçekten elle yazmak istemiyorum.

Bu benim çıkış formu (* elemanlar / my_apps.ctp *) kullanmaya çalışıyorum özümde kodu:

<?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));?>

Bu "* elemanları / my_apps.ctp *" yazdıran nedir:

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

Bu WILL NOT böyle bir şey olmalı açılış ve kapanış etiketleri yazdırın:

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

Herhangi bir fikir? Ben hata ayıklama yapmaya çalışmalısınız şey yararlı olacaktır.

Güncelleme:

Ben sadece elle kod witting çalıştı ve hatta dışarı çıkardı ediliyor. Post-processing gidiyor çeşit var mı? O benim form etiketlerini kaldırmak için sorumlu olabilir mi?

2 Cevap

Ben yanlış bir şey göremiyorum henüz, ama aklı için, ilk formda değişken $options için farklı bir ad kullanın, ya da daha iyisi, dizi yerleştirmekten önerebilirsiniz. Bu $options Eğer ikinci formda yapmış gibi seçim seçimler geçmek için kullanılan görmek daha yaygındır. Yani 'seçenekler' $ için kaydetme seçenekleri.

Sizin işlevi selfView() Eğer applications değerlerini atamak için görünür & değilsiniz formms.

Benim kişisel tercihi bu yazmaktır:

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

gibi bu:

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

Ben bu kodu biraz daha okunabilir yapar düşünüyorum.

İlk forma $ form-> end yankılanan değildir () yani formu düzgün kapama değil.