简体   繁体   English

使用 Opencart 在我的控制器中无法识别 POST 请求

[英]POST request doesn't recognize in my controller using Opencart

I have a problem in my code.我的代码有问题。 In my setup I created a single page for language selection.在我的设置中,我创建了一个用于语言选择的页面。 And I copy some of opencart's code on language template and also on controller.我在语言模板和控制器上复制了一些 opencart 的代码。 But my problem is after passing my form, the action controller doesn't get any POST data from my form.但我的问题是在通过我的表单后,动作控制器没有从我的表单中获取任何 POST 数据。

<form action="{{ action }}" method="POST" enctype="multipart/form-data" id="form-language">
    <div class="col-lg-4">
        <div class="border_index_in">
            <div class="holder">
                <h3>ENGLISH</h3>
                <button class="language-select btn btn-green" type="button" name="en-gb">Choose</button>
            </div>
        </div>
    </div>
    <div class="col-lg-4">
        <div class="border_index_in">
            <div class="holder">
                <h3>日本語</h3>
                <button class="language-select btn btn-green" type="button" name="jap">選択</button>
            </div>
        </div>
    </div>
    <div class="col-lg-4">
        <div class="border_index_in">
            <div class="holder">
                <h3>中文</h3>
                <button class="language-select btn btn-green" type="button" name="zh-hk">选择</button>
            </div>
        </div>
    </div>
</form>

JS:记者:

  // Language
    $('#form-language .language-select').on('click', function(e) {
        e.preventDefault();
        $('#form-language input[name=\'code\']').val($(this).attr('name'));
        $('#form-language').submit();
    });

Controller to show my language selection page控制器显示我的语言选择页面

public function language_switch() {
    $this->load->model('setting/extension');
    $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['action'] = $this->url->link('common/language/language');
    $data['code'] = $this->session->data['language'];

    $styles_array = array(
        'catalog/view/theme/onemidorie/stylesheet/style.css'
    );

    $scripts_array = array(

    );

    foreach($styles_array as $st) {
        $this->document->addStyle($st);
    }

    foreach($scripts_array as $sc) {
        $this->document->addScript($sc);
    }

    $data['styles'] = $this->document->getStyles();
    $data['scripts'] = $this->document->getScripts();

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

    $this->response->setOutput($this->load->view('common/language_selection', $data));

}

Controller that should accept the POST data from my form:应该接受来自我的表单的 POST 数据的控制器:

public function language() {
        print_r($this->request->post['code']); //Notice: Undefined index: code 
        die;
        if (isset($this->request->post['code'])) {
            $this->session->data['language'] = $this->request->post['code'];
        }

        if (isset($this->request->post['redirect'])) {
            $this->response->redirect($this->request->post['redirect']);
        } else {
            $this->response->redirect($this->url->link('common/home'));
        }
    }

Can you help me this?你能帮我这个吗?

You should use print_r($this->request->post);你应该使用 print_r($this->request->post); die;死;

Then you will get some post data.然后你会得到一些post数据。

because you define the name like "en-gb","jap" and "zh-hk".因为你定义了像“en-gb”、“jap”和“zh-hk”这样的名字。 So please use above code then you can get solution.所以请使用上面的代码然后你可以得到解决方案。

You're not posting any data - you're just showing a button.您没有发布任何数据 - 您只是显示一个按钮。 Use something more like使用更像

<input type="submit" value="english" name="lang"/>
<input type="submit" value="japanese" name="lang"/>

etc. then just look at等等 然后看看

$_POST['lang'] 

and see if it's english, japanese or whatever.看看它是英语、日语还是其他语言。

You can find out how opencart set language in /catalog/controller/startup/startup.php:您可以在 /catalog/controller/startup/startup.php 中找到 opencart 如何设置语言:

// Overwrite the default language object
$language = new Language($code);
$language->load($code);

$this->registry->set('language', $language);

So in controller what should accept the POST data you should dublicate this code before loading language:所以在控制器中什么应该接受 POST 数据你应该在加载语言之前复制这段代码:

// $this->request->post['code'] = 'en-gb' or 'ru-ru' or whatever.

$language = new Language($this->request->post['code']);
$language->load($this->request->post['code']);
$this->registry->set('language', $language);

// now opencart use new language and you can use it too:

$this->load->language('common/header');
$text_home = $this->language->get('text_home');

This works for me in opencart 2这在 opencart 2 中对我有用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM