我不知道这是否适合雇用......
我制作了一个API,其中的答案由die()函数发送,以避免一些更无用的计算和/或函数调用。
示例:
if (isset($authorize->refusalReason)) {
die ($this->api_return(true, [
'resultCode' => $authorize->resultCode,
'reason' => $authorize->refusalReason
]
));
}
// api_return方法:
protected function api_return($error, $params = []) {
$time = (new DateTime())->format('Y-m-d H:i:s');
$params = (array) $params;
$params = ['error' => $error, 'date_time' => $time] + $params;
return (Response::json($params)->sendHeaders()->getContent());
}
但是我的网站基于这个API,因此我创建了一个函数来创建Request
并根据其URI,方法,参数和标题返回它的内容:
protected function get_route_contents($uri, $type, $params = [], $headers = []) {
$request = Request::create($uri, $type, $params);
if (Auth::user()->check()) {
$request->headers->set('S-token', Auth::user()->get()->Key);
}
foreach ($headers as $key => $header) {
$request->headers->set($key, $header);
}
// things to merge the Inputs into the new request.
$originalInput = Request::input();
Request::replace($request->input());
$response = Route::dispatch($request);
Request::replace($originalInput);
$response = json_decode($response->getContent());
// This header cancels the one there is in api_return. sendHeaders() makes Content-Type: application/json
header('Content-Type: text/html');
return $response;
}
但是现在当我尝试调用API函数时,API中的请求会死掉,但也会死于我当前的请求。
public function postCard($token) {
$auth = $this->get_route_contents("/api/v2/booking/payment/card/authorize/$token", 'POST', Input::all());
// the code below is not executed since the API request uses die()
if ($auth->error === false) {
return Redirect::route('appts')->with(['success' => trans('messages.booked_ok')]);
}
return Redirect::back()->with(['error' => $auth->reason]);
}
你知道我能否比这更好地处理它?有关如何将我的代码转换成任何建议吗?
我知道我可以使用退货,但我总是想知道是否还有其他解决方案。我的意思是,我希望自己变得更好,所以如果我确切知道做我想做的事情的唯一方法是使用回报,我就不会问这个问题。
答案 0 :(得分:0)
因此,您似乎通过代码调用API端点,就像它来自浏览器(客户端)一样,我假设您的Route:dispatch没有发出任何外部请求(如curl等)
现在有各种方法可以解决这个问题:
如果函数get_route_contents
将处理所有请求,那么您需要从端点中删除骰子并简单地让它们返回数据(而不是回显)。你的这个"处理程序"将负责回应。
使您的Endpoint函数具有一个可选参数(或$ request变量中设置的某个属性),这将告诉函数这是一个内部请求,并且当请求直接来自时,应该返回数据您可以执行echo
使用curl等对您的代码进行外部调用(如果没有其他选项,则只执行此操作)