首页 > 解决方案 > 渲染特定模板/ AJAX 请求时,Cakephp 3 查看 App 控制器中设置的变量不可用

问题描述

我在我的应用程序控制器中设置了一些视图变量,例如公司名称、地址、联系信息,这些变量会根据子域而变化,以便它们在所有视图模板中都可用。但是,我正在努力确定为什么在发出 ajax 请求时不可用。

//App Controller beforeFilter

$this->set('company', 'Test Company');
$this->set('address', '14 Test Street, Test, TE5 3ST');
$this->set('email', 'test@test.com');

上述变量可用于所有非 ajax,即当我不呈现特定模板请求时,但是对于下面的示例请求,我无法访问 test_data 模板中的这些变量。

function _ajaxGetTestData() 
{
    $view = new View();
    $content = $view->render('Home/Ajax/test_data');
    $response['content'] = $content;
    $response['success'] = TRUE;

    $this->set(compact('response'));
    $this->set('_serialize', ['response']);
}

标签: ajaxcakephprequesthandler

解决方案


那是因为您没有从应用控制器序列化变量。

你可以试试你的方法:

$response['company'] = $company;
$response['address'] = $address;
$response['email'] = $email;

https://book.cakephp.org/3/en/views/json-and-xml-views.html#using-a-data-view-with-template-files


推荐阅读