I've implemented summernote in Laravel and uploading an article with images works as expected. On updating an article it works when an article doesn't have an image. But for an article with an image(s), it throws and error, Undefined array key.
This is the highlighted line with the error on the browser, list($type, $data) = explode(';', $data);. The line is the second line inside the loop in the update() method.
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'));
}
My update method
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();
}