CakePHP 3: получение данных из базы данных с использованием Ajax

Я работаю над проектом CakePHP 3, который имеет Apply Coupon форма.

Я хочу применить купон, используя Ajax.

Вид формы купона

<?= $this->Form->create(null, [
  'url' => ['controller' => 'Coupons', 'action' => 'checkCoupon'],
  'name' => 'checkCoupon'
]) ?>
<?= $this->Form->input('coupon_code', [
  'type' => 'text',
  'placeholder' => 'Apply Coupon Code',
  'label' => false
]) ?>
<?= $this->Form->submit('Apply Coupon') ?>

и checkCoupon действие в CouponsController является

public function checkCoupon()
{
  $this->request->onlyAllow('ajax'); // No direct access via browser URL

  if ($this->request->is('post')) {
    $couponCode = $this->request->data['coupon_code'];
    $couponCheck = $this->Coupons->find('all', [
      'conditions' => [
      'coupon_code' => $couponCode
      ]
    ]);
    if ($couponCheck->count() === 1) {
       $coupon = $couponCheck->first();
       $valid_till = $coupon->valid_till;
       $dt = new Time($valid_till);
       $date = $dt->format('Y-m-d');

       if ($date >= date('Y-m-d')) {
         echo 'Coupon is Valid. Discount of '.$coupon->value.'has been applied';
       } else {
         echo 'Coupon is Expired';
       }
    } else {
       echo 'This is not a valid coupon code';
    }
  }
}

Я хочу $coupon->value а также $coupon->id быть найденным и добавленным в ссылку для оформления заказа как

<?= $this->Html->link(__('Confirm Checkout'), ['controller' => 'ServiceRequests', 'action' => 'confirmCheckout', $service->id, $primaryAddressId, $serviceArea->id, $coupon->id], ['class' => 'btn btn-block btn-success']) ?>

Apply Coupon форма находится в checkout действие RequestsControllerТакже форма работает хорошо. Я проверил это, удалив onlyAllow('ajax') строка и печатные значения в check_coupon.ctp Посмотреть.

Как я могу сделать это с помощью Ajax?

Редактировать 2: checkout.ctp

<div class="form-info coupon">
  <?= $this->Form->create(null, [
    'url' => ['controller' => 'Coupons', 'action' => 'ajax_checkCoupon'],
    'name' => 'checkCoupon',
    'id' => 'checkCoupon'
  ]) ?>
  <?= $this->Form->input('coupon_code', [
    'type' => 'text',
    'placeholder' => 'Apply Coupon Code',
    'label' => false
  ]) ?>
  <label class="hvr-sweep-to-right">
    <?= $this->Form->submit('Apply Coupon', ['id' => 'applyCoupon']) ?>
  </label>
  <label id="couponUpdate"></label>
  <label id="loading" style="display:none;">Loading...</label>
  <?php
     $data = $this->Html->script('#checkCoupon')->serializeForm(['isForm' => true, 'inline' => true]);
     $this->Html->script('#checkCoupon')->event(
       'submit',
       $this->Html->script(
        [
          'controller' => 'Coupons',
          'action' => 'ajax_checkCoupon'
        ],
        [
          'update' => '#couponUpdate',
          'data' => $data,
          'async' => true,
          'dataExpression' => true,
          'before' => "$('#loading').fadeIn();$('#applyCoupon').attr('disabled','disabled');",
          'complete' => "$('#loading').fadeOut();$('#applyCoupon').removeAttr('disabled');"
        ]
      )
    );
   ?>
  </div>

Ошибка: вызов функции-члена serializeForm() для строки в строке 18 вcheckout.ctp

0 ответов

Другие вопросы по тегам