Laravel 存储函数更改返回数据
Posted
技术标签:
【中文标题】Laravel 存储函数更改返回数据【英文标题】:Laravel store function changes return data 【发布时间】:2014-07-17 23:08:27 【问题描述】:很确定我在这里做错了什么,只是不知道是什么或在哪里。
我有一个 Laravel 控制器,它处理 ajax 发布请求并将 curl 请求的结果返回给该 ajax 调用:
public function store()
/** Receive long and lat through ajax **/
$long = Input::get('longitude');
$lat = Input::get('latitude');
$location = $lat . "," . $long;
$url = blablable;
$curl = curl_init();
curl_setopt_array($curl,
array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url
));
$result = curl_exec($curl);
return $result;
curl_close($curl);
这可行:curl 返回一个 JSON 数组,该数组被传递回 ajax 调用。
但是现在我想将传入的数据保存到数据库中:
$location = new Location();
$location->latitude = Input::get('latitude');
$location->longitude = Input::get('longitude');
$location->save();
我在函数顶部添加了这 4 行,数据被保存到数据库中,但 JSON 数组被抓取,不知何故 <!-- app/models/Location.php -->
被添加到返回顶部,使 JSON 数组无效。
不知道是什么原因造成的,因此非常感谢任何提示或建议!
-- 编辑1--
Input::all();
的结果是
array(2)
["latitude"]=>
string(10) "50.8809794"
["longitude"]=>
string(9) "4.6920714"
【问题讨论】:
你能把dd(Input::all())
的结果贴在store方法的开头吗?
另外,curl_close($curl);
应该在 return 语句之前。
使用 Input::all() 的结果编辑了问题。在返回之前关闭 curl。
返回前的dd($result)
呢?
$location 在保存后变为Eloquent
对象。你应该调用 $location->toJson()?也许我不明白你:你是在说 Input::all();保存位置后格式错误?
【参考方案1】:
这不是一种解决方案,而是一种清理代码的方式:
-
您不需要使用
curl
,可以改为使用Request::create()
和Route::dispatch()
。
您应该在模型中使用protected $fillable
属性来清理新条目。
你的代码可以变成:
public function store()
// This is for saving the entry
$location = new Location();
$location->fill(Input::all());
$location->save();
// This is for the cURL
// (assuming this is a GET requst, but other methods are available)
$request = Request::create('/path/to/url/', 'GET');
$response = Route::dispatch($request);
// Do stuff with the $response or just return it
return $response;
【讨论】:
以上是关于Laravel 存储函数更改返回数据的主要内容,如果未能解决你的问题,请参考以下文章