【发布时间】:2014-11-13 10:57:29
【问题描述】:
我正在尝试让 ZF2 以 REST 方式响应不同的请求类型。
在我的 module.config.php 我有这个路由器配置。
'router' => array(
'routes' => array(
'student' => array(
'type' => 'segment',
'options' => array(
'route' => '/student[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Student\Controller\Student',
'action' => 'index',
),
),
),
),
),
在前端,我使用 Backbone 根据用户交互向服务器发送 GET、POST、DELETE 请求。 当用户触发删除 id 为 n 的学生的操作时,骨干网将使用 DELETE 请求发送 /somePath/student/n。 当用户触发操作以获取 id 为 n 的学生时,骨干网将使用 GET 请求发送 /somePath/student/n。
如果我希望当前设置正常工作,我必须更改 Backbone 请求并将 URL 从 student/n 更改为 student/delete/n,如果我想删除具有该 ID 的学生,对于 GET 也是如此。
这是我在客户端所做的,我想避免。
define(['backbone'], function(Backbone){
return Backbone.Model.extend({
defaults:{
//set default model values
},
initialize: function(){
//initialize
},
methodToURL: {
'delete': '/student/delete'
},
sync: function(method, model, options) {
options = options || {};
var id = arguments[1]['id']
options.url = model.methodToURL[method.toLowerCase()] + '/' + id;
return Backbone.sync.apply(this, arguments);
}
});
});
在服务器端的控制器中,我想针对不同的请求类型运行不同的操作方法。
public function deleteAction()
{
//some code
}
public function getAction()
{
//some code
}
我不想更改默认主干行为(拦截和更改请求)。
有没有办法配置 ZF2 路由器使用相同的路由但根据请求方法类型触发不同的操作?
【问题讨论】:
标签: javascript php backbone.js zend-framework2