Представление изменения CakePHP не передает данные от контроллера - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть функция в контроллере, которая сначала проверяет, отправил ли пользователь форму с веб-сайта, Facebook или мобильного телефона.

Затем он меняет макет по мере необходимости. Но с мобильного телефона я хочу загрузить другое представление, так как дисплей совсем другой.

Моя проблема в том, что данные с контроллера не передаются в новое представление. Я получаю неопределенные переменные и аргументы для всех php в представлении. Код php одинаков во всех представлениях, это только расположение div, которое я изменяю в мобильном представлении.

Я не понимаю, почему это может происходить?

Контроллер

function availability() {

    if ($_REQUEST['from'] == 'facebook') {
        $this->layout = 'facebook';
    }elseif ($_REQUEST['from'] == 'website'){
        $this->layout = 'res';
    }elseif ($_REQUEST['from'] == 'mobile'){
        $this->layout = 'mobile_layout';
        $this->render( 'mobile' );
    };

    $this->newSession();

    $msg[0] = array(); // 0 = bad messages
    $msg[1] = array(); // 1 = good messages 

    if(isset($_REQUEST['date_start'],$_REQUEST['date_end'])){
            $data['Availability']['date_start'] = $_REQUEST['date_start'];
            $data['Availability']['date_end'] = $_REQUEST['date_end'];
    }

    if(!isset($_REQUEST['voucher_code'])){
        $_REQUEST['voucher_code'] = 0;
    }   

Одной из ошибок в мобильном представлении, строка 83 в res_controller, является $ this-> render ('mobile');:

 Notice (8): Undefined variable: availability [APP/views/res/mobile.ctp, line 16]
Code | Context

include - APP/views/res/mobile.ctp, line 16
View::_render() - CORE/cake/libs/view/view.php, line 731
View::render() - CORE/cake/libs/view/view.php, line 426
Controller::render() - CORE/cake/libs/controller/controller.php, line 909
ResController::availability() - APP/controllers/res_controller.php, line 83
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 204
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171
[main] - APP/webroot/index.php, line 83

1 Ответ

1 голос
/ 24 ноября 2011

Когда вы звоните Controller::render, я считаю, что представление отображается (и возвращается) немедленно .Итак, перед этим вызовом вы должны установить любые переменные, которые ожидает представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...