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

时间:2017-07-11 02:52:35

标签: javascript php jquery opencart opencart2.x

我的代码中存在问题。在我的设置中,我创建了一个用于语言选择的单页。我将一些opencart的代码复制到语言模板上,也复制到控制器上。但我的问题是在传递我的表单后,操作控制器没有从我的表单中获取任何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();
    });

控制器显示我的语言选择页

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

}

应接受表单中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'));
        }
    }

你能帮帮我吗?

3 个答案:

答案 0 :(得分:0)

你应该使用 的print_r($这 - &GT;请求 - &GT;交);         死;

然后你会得到一些发布数据。

因为您将名称定义为&#34; en-gb&#34;,&#34; jap&#34;和&#34; zh-hk&#34;。所以请使用上面的代码,然后就可以得到解决方案了。

答案 1 :(得分:0)

您没有发布任何数据 - 您只是显示一个按钮。使用更像

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

等。然后看看

$_POST['lang'] 

看看它是英文,日文还是其他什么。

答案 2 :(得分:0)

您可以在 /catalog/controller/startup/startup.php 中了解 opencart 如何设置语言:

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

$this->registry->set('language', $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');

这在 opencart 2 中对我有用