在由emberjs调用时,CakePHP返回空响应

时间:2013-06-08 07:21:09

标签: rest cakephp ember.js

我正在尝试在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。不太清楚从哪里开始。

2 个答案:

答案 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调用 - 这可能就是您想要的,但如果没有,只需指定您 想要允许的域。