2017-04-19 99 views
0

在routes.php文件删除我添加CakePHP的3方法中休息路线

$routes->extensions(['json']); 
$routes->resources('News'); 

当邮差,我把网址和选择方法GET,重定向框架我index()动作,如果我选择方法POST框架重定向我add()方法,但如果我选择方法DELETE我再次去index()。如果我选择方法DELETE,如何去删除()动作?

////////////////// 我明白我的问题。一切正常。问题在我的网址。我选择了方法Delete,我的网址是rest.app/api/news。这就是为什么框架重定向我index()行动,但如果我把rest.app/api/news/1 并获得方法Delete我去delete()行动

+1

没有什么是你需要做的,不是发送一个适当的'DELETE'要求等。去一些调试,并检查可能的错误和重定向。 – ndm

回答

1

REST应该工作如下:

GET /用户列表中的用户。

GET/users/5 show user 5.

POST/users add user。

DELETE /用户/ 5删除用户5

在你的控制器动作,检查该请求的方法,并调用相应的代码。

下面是我自己的休息控制器之一的索引操作:

public function indexAction() 
{ 
    switch ($_SERVER['REQUEST_METHOD']) { 
     case 'POST': 
      $json = $this->createRecord(); 
      break; 
     case 'PUT': 
     case 'PATCH': 
     case 'DELETE': 
     $json = $this->sendJSONResponse(array('error' => 'Invalid HTTP Method, did you send an ID?'), self::RESPONSE_NOT_FOUND); 
      break; 
     case 'GET': 
     default: 
      $json = $this->listRecords(); 
      break; 
    } 
    return $json; 
} 
+0

这就是连接资源路由(如OP示例所示)的优点,它会根据请求方法创建连接到适当操作的路由。注意:你不应该直接在CakePHP中使用超级全局变量,这在测试环境中会变得特别恼人,而是使用框架提供的抽象访问方法(如请求对象)。 – ndm

+0

绝对关于全局$ _SERVER var。如果Cake有一个请求对象,那就从那里获取这个值! :-) – delboy1978uk