我有一个控制器方法,它一直通过解析该扩展来处理JSON请求,但现在我需要打开它来跨域ajax,所以我想通过解析该扩展来提供JSONP变体。我已经更新了routes.php
文件:
Router::parseExtensions( 'json', 'jsonp' );
到目前为止一切都很好,但结果呈现时幸福就结束了。虽然.json
扩展程序会自动选择json/default.ctp
布局,但.jsonp
内容会继续采用非特定的默认布局(及其所有不必要的HTML内容)。我已尝试使用RequestHandler::setContent()
将响应内容类型设置为json
和js
,但这似乎不会触发对给定布局目录的调用。
有谁知道什么决定了哪个特定于内容的布局目录?我尝试创建jsonp/default.ctp
并尝试使用我的JSONP结果创建js/default.ctp
布局,但似乎没有任何参与。我只是得到了正常的默认值。
对于如何将扩展/内容类型映射到这些布局目录的任何见解都将非常感激。
答案 0 :(得分:1)
我通过明确设置layoutPath
值暂时解决了这个问题:
$this->layoutPath = $params['url']['ext'];
这感觉就像必须有更好的解决方案之一,但也许就是这样。我将暂时搁置这个问题,希望其他人有一个涉及Cake自动化的解决方案。