如何在Laravel中使用summernote更新带有图像的文章



我已经在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();
}

最新更新