Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 30.04.2019 00:15:46

Сохранение фото в редакторе Summernote Laravel 5.8

Когда поставил в проэкте laravel редактор Summernote то там при сохранеии возникает ошибка.

SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'content' at row 1 (SQL: update `posts` set `content` = <h3>DIGITAL IPSUM<img 

Может кто подскажет что делать?
Вообще у таких редакторов есть функционал чтобы сохранять фото?

Не в сети

#2 30.04.2019 07:32:41

Re: Сохранение фото в редакторе Summernote Laravel 5.8

А какой тип у столбца content?

Не в сети

#3 30.04.2019 09:14:18

Re: Сохранение фото в редакторе Summernote Laravel 5.8

Вот копирую из миграций smile

$table->text('content')->nullable();

Мне кажется длинна столбца подходит.
Но там нету функционала, который бы сохранял фото в какую-то папку, а дальше генерировал

<img src="путь-к-сохраненному-изображению">

А как вы считаете?

Не в сети

#4 30.04.2019 09:16:27

Re: Сохранение фото в редакторе Summernote Laravel 5.8

p.s. нашел что-то похожее на решение этой проблеммы в интернете, но пока не тестил.
Вставлю тут код, может кому пригодится.
Файл из view:

@section('content')
{{Form::open('PostController@edit')}}
  <input type="hidden" name="post_id" value="1">
  <legend>Message</legend>
  <textarea id="editor" name="message"></textarea>
  <button type="submit">Save</button>
{{Form::close()}}
@stop

@section('scripts')
  $('#editor').summernote();
@stop

Файл контроллера

<?php
/**
 * This exemple shows how to parse base64 encoded images (submitted using Summernote), save them locally 
 * and replace the 'src' attribute in the submited HTML content
 *
**/
use Intervention\Image\ImageManagerStatic as Image;
class PostController {
  
	public function edit(){
		$post = Post::findOrFail(Input::get('post_id'));  // Post object exemple
		$message = Input::get('message'); // Summernote input field
		
		$dom = new DomDocument();
		$dom->loadHtml($message, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    
		$images = $dom->getElementsByTagName('img');
		
		
		
		// foreach <img> in the submited message
		foreach($images as $img){
			$src = $img->getAttribute('src');
			
			// if the img source is 'data-url'
			if(preg_match('/data:image/', $src)){
				
				// get the mimetype
				preg_match('/data:image\/(?<mime>.*?)\;/', $src, $groups);
				$mimetype = $groups['mime'];
				
				// Generating a random filename
				$filename = uniqid();
				$filepath = "/images/$filename.$mimetype";
	
				// @see [url]http://image.intervention.io/api/[/url]
				$image = Image::make($src)
				  // resize if required
				  /* ->resize(300, 200) */
				  ->encode($mimetype, 100) 	// encode file to the specified mimetype
				  ->save(public_path($filepath));
				
				$new_src = asset($filepath);
				$img->removeAttribute('src');
				$img->setAttribute('src', $new_src);
			} // <!--endif
		} // <!--endforeach
		
		$post->message = $dom->saveHTML();
		$post->save();
		
		Session::flash('message','Post updated!');
		return Redirect::back();
  	}
}

Не в сети

Подвал раздела