我已经在Laravel中实现了summernote,并且上传带有图像的文章如预期的那样工作。在更新一篇文章,它工作时,一篇文章没有图像。但是对于带有图片的文章,它抛出一个错误,Undefined array key
。
这是在浏览器list($type, $data) = explode(';', $data);
上显示错误的突出显示行。本行为update()
法loop
内的第二行。
My store method
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required'
]);
$content = $request->body;
$dom = new DomDocument();
$dom->loadHtml($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$imageFile = $dom->getElementsByTagName('img');
foreach ($imageFile as $item => $image) {
$data = $image->getAttribute('src');
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$imgeData = base64_decode($data);
$image_name = "/upload/" . time() . $item . '.png';
$path = public_path() . $image_name;
file_put_contents($path, $imgeData);
$image->removeAttribute('src');
$image->setAttribute('src', $image_name);
}
$content = $dom->saveHTML();
$post = Post::create([
'title' => $request->title,
'body' => $content
]);
// dd($post->toArray());
return redirect(route('posts.index'));
}
我的更新方法
public function update(Request $request, Post $post)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required'
]);
$content = $request->body;
libxml_use_internal_errors(true);
$dom = new DomDocument();
$dom->loadHtml($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | libxml_use_internal_errors(true));
$imageFile = $dom->getElementsByTagName('img');
foreach ($imageFile as $item => $image) {
$data = $image->getAttribute('src');
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$imgeData = base64_decode($data);
$image_name = "/upload/" . time() . $item . '.png';
$path = public_path() . $image_name;
file_put_contents($path, $imgeData);
$image->removeAttribute('src');
$image->setAttribute('src', $image_name);
}
$content = $dom->saveHTML();
$post->title = $request->title;
$post->body = $content;
$post->save();
return redirect()->back();
}
当你更新你的文章,你不需要转换已经转换的图像(从blob到链接到文件)
public function update(Request $request, Post $post)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required'
]);
$content = $request->body;
libxml_use_internal_errors(true);
$dom = new DomDocument();
$dom->loadHtml($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | libxml_use_internal_errors(true));
$imageFile = $dom->getElementsByTagName('img');
foreach ($imageFile as $item => $image) {
$data = $image->getAttribute('src');
if (strpos($data, ';') === false) {
continue;
}
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$imgeData = base64_decode($data);
$image_name = "/upload/" . time() . $item . '.png';
$path = public_path() . $image_name;
file_put_contents($path, $imgeData);
$image->removeAttribute('src');
$image->setAttribute('src', $image_name);
}
$content = $dom->saveHTML();
$post->title = $request->title;
$post->body = $content;
$post->save();
return redirect()->back();
}