Пользовательская функция контроллера Opencart не найдена - PullRequest
0 голосов
/ 06 марта 2019

Когда я попытаюсь отправить POST-запрос от jquery, я был принят - 404 не найден

Там мой пользовательский контроллер:

<?php
class ControllerCardsCards extends Controller {
    public function index() {
        $this->document->setTitle($this->config->get('config_meta_title'));
        $this->document->setDescription($this->config->get('config_meta_description'));
        $this->document->setKeywords($this->config->get('config_meta_keyword'));

        if (isset($this->request->get['route'])) {
            $this->document->addLink($this->config->get('config_url'), 'canonical');
        }

        $data['column_left'] = $this->load->controller('common/column_left');
        $data['column_right'] = $this->load->controller('common/column_right');
        $data['content_top'] = $this->load->controller('common/content_top');
        $data['content_bottom'] = $this->load->controller('common/content_bottom');
        $data['footer'] = $this->load->controller('common/footer');
        $data['header'] = $this->load->controller('common/header');

        $this->response->setOutput($this->load->view('cards/registraion', $data));
        $this->load->model('cards/cards');
        $this->log->write('Controller main');

    }

    public function addcardquery($data){
        $this->log->write('fired addCardQuery function');
        $this->load->Model('cards/cards');
        $this->load->language('cards/cards');
        $temp = $this->model_cards_cards->insertCard($data);
    }

И моя функция jquery:

$(document).ready(function(){ 
    $("#regCardSubmit").click(function(event) { 
          event.preventDefault();
                var myObject = new Object();
                myObject.lastname = $('#card_reg_lastname').val();

                myObject.firstname = $('#card_reg_firstname').val();
                myObject.middlename = $('#card_reg_middlename').val();
                myObject.cardnum = $('#card_reg_card_num').val();
                myObject.birthday = $('#card_reg_birthday').val();
                myObject.phone = $('#card_reg_phone_num').val();
                myObject.email = $('#card_reg_email').val();

                var data = {"action": "addcardquery"};
                data = $(this).serialize() + "&" + $.param(data);
                var outjson = JSON.stringify(myObject);
                //alert(outjson);
                $.ajax({
                    type: "post",
                    dataType: "json",
                    url: "index.php?route=cards/cards/addcardquery",
                    data: outjson,
                    success: function(data) { alert(outjson); },
                    error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); }
                });
                return false;
    });
});

функция addcardquery всегда не срабатывает, меня пытались вызвать из браузера путь index.php? Route = cards / cards / addcardquery, но я получал все то же самое.

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Первое падение вы можете заменить

$this->load->Model('cards/cards'); 

Для

$this->load->model('cards/cards');

Второе изменение здесь

$temp = $this->model_cards_cards->insertCard($data);

после добавления ниже кода

$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));

я работаю хорошо.

0 голосов
/ 14 марта 2019

Я заметил пару вещей, которые вы сделали неправильно, но не ожидал, что это вызовет проблему.

  • $data не должно быть в параметре функции - OpenCart не работает так
  • $this->load->Model должно быть $this->load->model (обратите внимание на нижний регистр m)

VQMod / OCMod вряд ли будут виновником здесь, как кто-то предложил, поскольку им нужно будет активно редактировать ваш файл, используя свою систему. Единственное возможное объяснение, которое я могу придумать, это то, что у вас в php включено что-то вроде opcache , и это нужно отключить, пока вы разрабатываете код

0 голосов
/ 07 марта 2019

Проверьте ваши модификации OCMOD.кажется, у вас все правильно, но это не просматривается фреймворком.

перейдите на system/storage/modification/catalog/controller/cards/cards.php и проверьте, есть ли оно (ваша папка хранения может быть перемещена выше, проверьте это тоже)

...