【发布时间】:2015-06-12 10:17:46
【问题描述】:
我有一个功能,可以在 YouTube 链接保存到数据库之前对其进行清理。我的 preg_match 工作正常,但我无法将经过清理的版本(只是 YouTube ID)传回控制器,它会恢复未经过清理的原始链接。
视频请求:
public function rules()
{
$this->sanitize();
return [
'page_id' => 'required|integer',
'visibility' => 'required',
'item_type' => 'required',
'title' => 'required|string',
'embed' => 'required',
'content' => '',
'image' => 'string',
'order' => 'required|integer'
];
}
public function sanitize()
{
$input = $this->all();
if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $input['embed'], $match)) {
$input['embed'] = $match[1];
} else {
return "Please try another YouTube URL or link";
}
$this->replace($input);
}
视频控制器:
public function store(VideoRequest $request)
{
$video = array_intersect_key(Input::all(), $request->rules());
VideoItem::create($video);
flash()->success('New video created');
return redirect()->back();
}
当我在 sanitize() 函数的底部dd($input) 时,它将正确返回所有带有嵌入代码的输入,就像一个 ID。当它传递给 rules(); embed 现在是原始链接了吗?
【问题讨论】:
标签: php laravel preg-match laravel-5 sanitize