我正在尝试在CakePHP 2.3应用程序中设置一些REST API端点。我尝试过使用几种输出json的方法。当我用浏览器点击url时它会工作,但是EmberJS RestAdapter发出的调用失败,响应空响应体。这是我现在的控制器。
App::uses('Controller', 'Controller');
App::uses('AppController', 'Controller');
class VcrAppController extends AppController {
public $viewClass = 'Json';
}
App::uses('VcrAppController', 'Vcr.Controller');
class DestinationsController extends VcrAppController
{
public $uses = array('Vcr.Destination');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index');
$this->Auth->allow('view');
}
public function index()
{
$destinations = $this->Destination->find('all');
$this->set(array(
'destinations' => $destinations,
'_serialize' => array('destinations')
));
}
public function view($destination_id)
{
$destination = $this->Destination->findById($destination_id);
$this->set(array(
'destination' => $destination,
'_serialize' => array('destination')
));
}
}
我怀疑这与请求处理程序有关。我尝试了几种不同的实现,包括mapresources和parseextensions,以及修改emberjs以将.json附加到url。不太清楚从哪里开始。
答案 0 :(得分:0)
您是否正在使用RequestHandler组件?在AppController中?我没有在你粘贴的两个控制器中看到它。
您是否检查了http://book.cakephp.org/2.0/en/development/rest.html?
另外,你检查了你的日志文件夹吗?调试是否设置为2?
答案 1 :(得分:0)
我遇到了这个问题。我的假设是你有同样的原因,虽然你没有说:客户端Ember JS和CakePHP服务器在不同的域上(例如客户端是本地的,服务器已经托管)。
修复是添加这个:
$this->response->header('Access-Control-Allow-Origin', '*');
到您要为API访问的控制器操作。可能有更好的方法使这是默认的,应用程序范围,但我还没知道。希望这会有所帮助。
编辑:请注意*表示任何域都可以访问API调用 - 这可能就是您想要的,但如果没有,只需指定您 想要允许的域。