我想做这样的事情:GET api/companies/3/employees/45
。
解决方案1
我猜api
是控制器,companies
是资源,employees/45
是参数。但是我如何指定它是id = 3的公司?
解决方案2
或者api
可能是控制器(带索引资源),我可以使用companies/3
和employees/45
作为参数。
对于GET
,POST
和PUT
,我可以使用以下方法检索参数:
$this->get('blah'); // GET param
$this->post('blah'); // POST param
$this->put('blah'); // PUT param
但是DELETE
是不同的,不能以相同的方式使用:
public function index_delete($id)
{
$this->response([
'returned from delete:' => $id,
]);
}
那么我该怎样做DELETE api/companies/3
和DELETE api/companies/3/employees/45
?
解决方案3
还有其他建议吗?
由于
答案 0 :(得分:0)
您检查员工是否包含在请求中,然后将其传递给下面的功能示例
public function index_delete($id = NULL, $child = NULL, $child_value = NULL)
{
switch ($child) {
case NULL:
$this->delete_company($id);
break;
case 'employee':
$this->delete_employee($id, $child_value);
break;
default:
// some error
}
}
public function delete_company($company_id){}
public function delete_employee($company_id, $employee_id){}
所以这里会发生以下情况:
api/companies/1
:它将转到delete_company
功能以删除公司1 api/companies/1/employees/45
:它将转到delete_employee
功能以删除公司1中的员工45 答案 1 :(得分:0)
Codeigniter帮助您使用路线。转到应用程序> config> routes.php文件 添加这样的一行
$route['api/companies/(:num)/employees/(:num)']['GET'] = 'Test/do_stuff/$1/$2';
这转化为,当您向api/companies/3/employees/45
发出请求时,codeigniter将匹配上述路由,并将转到名为Test
的控制器,该控制器具有名为do_stuff
的函数并通过comapany id和employee id作为参数,所以它看起来像这样。
function do_stuff_get($company_id, $company_id)
{
$this->response(array($company_id, $company_id));
}
路由中的[' GET']部分指定它应匹配GET请求, 您可以为POST请求编写不同的规则并调用其他函数。
(:num)指定它需要一个数字,你也可以指定(:any)。
在您的情况下,如果您想根据网址执行删除,则需要考虑订单和请求类型。 在routes.php文件中,将获取与进入的请求匹配的第一个规则,并忽略其他规则。
因此,对于删除操作,您的routes.php将如下所示
$route['api/companies/(:num)']['DELETE'] = 'Test/delete_company/$1';
$route['api/companies/(:num)/employees/(:num)']['DELETE'] = 'Test/delete_employee/$1/$2';
因此,如果您想要删除公司并向DELETE api/companies/3
发出请求,它将匹配第一个规则并转到函数delete_company
,该函数将具有一个参数,该参数是传递的数字在网址中,对于第二种删除员工的情况,它将匹配第二条规则并转到函数delete_employee
。
有关路由检查URI Routing
的详细信息