1

我正在尝试在 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。不太确定从这里去哪里。

4

2 回答 2

0

我有这个确切的问题。我的假设是你有同样的原因,虽然你没有说出来:客户端 Ember JS 和 CakePHP 服务器在不同的域上(例如客户端是本地的,服务器已经托管)。

解决方法是添加以下内容:

$this->response->header('Access-Control-Allow-Origin', '*');

到您想要为您的 API 访问的控制器操作。可能有更好的方法让它成为应用程序范围内的默认设置,但我还不知道。希望这可以帮助。

编辑:请注意,* 表示任何域都可以访问 API 调用——这很可能是您想要的,但如果不是,只需指定您确实希望允许的域。

于 2013-08-14T18:39:24.580 回答
0

您是否在使用 RequestHandler 组件?在 AppController 中?我在您粘贴的两个控制器中都没有看到它。

你检查过 http://book.cakephp.org/2.0/en/development/rest.html吗?

另外,你检查你的日志文件夹了吗?调试是否设置为 2?

于 2013-06-09T20:53:32.210 回答