2011-11-24 110 views
0

我在控制器中有一个函数,首先检查用户是否从网站,脸书或手机提交表单。cakephp更改视图不传递来自控制器的数据

然后它根据需要更改布局。但随着移动我想加载一个不同的看法,因为显示器是完全不同的。

我的问题是来自控制器的数据没有传递到新的视图。我得到了视图中所有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; 
    } 

一项所述的移动视图中的错误,在res_controller线83是$这 - >渲染( '移动');:

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

当调用Controller::render ,我相信该视图立即呈现(并返回)。因此,在调用之前,您必须设置视图所期望的任何变量。

+0

我应该把网站,脸谱和移动检查功能的末尾,所以,功能后,设置VAR和进行计算?我已经剥离了其他视图作为测试,是的问题是$ this-> render('mobile');作为它自己的移动工作。 –

+0

你应该尝试。 – bfavaretto

+0

感谢您的帮助 –

相关问题