سؤال

لذلك لدي وحدة تحكم مستخدمين مع إجراء يسمى "مقابلة الذات" تبدو هكذا: (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');
}

هذا يجعل صفحة ملف تعريف تحتوي على نموذج واحد عليها. هذا ال أول النموذج المقدم على الصفحة ويعمل بشكل جيد كما تتوقع.

عرض قصاصة الرمز: (المستخدمين/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>

ال لغة البرمجة يتم إنتاج شكل "المستخدمين/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>

ثم أتصل والعنصر الذي ستقدم أيضًا نموذجًا. ((المستخدمين/view.ctp)

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

ثم هذا هو المكان الذي يحدث كل شيء. بغض النظر عن ما أحاول ، لا يمكنني الحصول على هذا النموذج الثاني للطباعة بشكل صحيح. سيتم طباعة الجزء الأوسط من النموذج ، وليس فقط العلامات الافتتاحية والإغلاق. معهم ، فإن النموذج عديم الفائدة بالنسبة لي. في هذه المرحلة وأنا حقًا لا أريد أن أكتبها باليد.

هذا هو الرمز في العنصر الذي أحاول استخدامه لإخراج النموذج (عناصر/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));?>

هذا هو ما "عناصر/my_apps.ctp"يطبع:

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

هو - هي سوف لن اطبع علامات الفتح والإغلاق التي يجب أن تكون مثل هذا:

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

أيه أفكار؟ شيء يجب أن أحاول القيام به للتصحيح سيكون مفيدًا.

تحديث:

لقد حاولت للتو ثياب الرمز باليد وحتى يتم تجريده. هل هناك نوع من ما بعد المعالجة؟ هل يمكن أن يكون ذلك مسؤولاً عن إزالة علامات النموذج الخاصة بي؟

هل كانت مفيدة؟

المحلول

لا أستطيع رؤية أي شيء خاطئ حتى الآن ، لكن هل يمكنني أن أقترح ذلك لعقلك ، إما أن تستخدم اسمًا مختلفًا للمتغير $options في النموذج الأول ، أو الأفضل من ذلك ، اكتب الصفيف المضمّن. من الأكثر شيوعًا أن نرى $options تستخدم لتمرير خيارات التحديد كما فعلت في النموذج الثاني. أي احفظ خيارات $ لـ "الخيارات".

في وظيفتك selfView() لا يبدو أنك تعين القيم إلى applications & formms.

تفضيلي الشخصي هو كتابة هذا:

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

مثله:

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

أعتقد أنه يجعل الكود أكثر قابلية للقراءة قليلاً.

نصائح أخرى

في النموذج الأول ، لا يرددك $ form-> end () حتى لا يتم إغلاق النموذج بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top