Как я загружаю изображение на laravel 6? - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь отредактировать изображение на laravel 6, но оно не переходит к следующему представлению, остается на виде формы.

Я видел много учебных пособий laravel 5.8 и 6. Я никак не могу заставить его работать

Это контроллер:

 public function update(Request $request, $id)
{


    $validator = $request->validate([
       'titulo' => 'required | max:50', //campo obligatorio y máximo 50 caracteres
       'contenido' => 'required | max:150', 
       'imagen' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:4096',
    ]);

     $image_name = time().'.'.$request->imagen->getClientOriginalExtension();
     $request->image->move(public_path('images'), $image_name);


     $datos = array(
        'titulo' => $request->titulo,
        'contenido' => $request->contenido,
        'imagen' => $image_name,
    );

    Noticia::whereId($id)->update($datos);


    return redirect('/mostrar');
}

Это Web. php файл:

Route::get('/actualizar/{id}', 'crearNoticiaController@update')->name('actualizar');
Route::get('/editar/{id}', 'crearNoticiaController@edit')->name('editar');

это Файл формы:

<div class="subir-imagen">
    <form method="get" action="{{ route('actualizar', $noticia->id) }}"  enctype="multipart/form-data">
        @csrf   
        <div class="crear-titulo">
            <input class="titulo" type="text" name="titulo" placeholder="Escriba el titulo" value="{{$noticia->titulo}}">
        </div>

        <div class="crear-contenido">
            <textarea  class="ckeditor" name="contenido" placeholder="Escriba el contenido" >
                {{$noticia->contenido}}
            </textarea>
        </div>

        <table border="2">
            <tr>
                <td><img src="{{URL::to('/')}}/images/{{$noticia->imagen}}" alt="imagen" width="250" align="left"/></td>
            </tr>
        </table>



        <div class="form-group">
            <div class="col-md-6">
                <input type="file" class="form-control" name="imagen" />
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-6 col-md-offset-4">
                <input type="submit" class="btn btn-primary" value="Enviar" id="btn-enviar" />
            </div>
        </div>
    </form>
</div>

Спасибо за помощь

Ответы [ 3 ]

0 голосов
/ 23 марта 2020

Сначала запустите на консоли проекта команду:

php artisan storage:link

Затем попробуйте этот код, и если будет возвращено какое-либо сообщение об ошибке, сообщите мне khow:

$imagen = $request->file("imagen");

$extension = $imagen->extension();
$filename = time().".".$extension;

$request->file('imagen')->storeAs("public/images", $filename);

Наконец проверьте папку public/images на наличие файла изображения.

Также вы можете прочитать о хранении загруженных файлов в laravel 6.x официальном документации

0 голосов
/ 23 марта 2020

Я решил следующим образом:

В сети. php Я поставил патч вместо get

Route::patch('/actualizar/{id}', 'crearNoticiaController@update')->name('actualizar');

В лезвии редактирования я поставил: @method ('PATCH' )

А это обновление в контроллере:

 public function update(Request $request, $id)
{


    $noticia = Noticia::findOrFail($id);


    $noticia->titulo = $request->get('titulo'); 
    $noticia->contenido = $request->get('contenido');
    $noticia->imagen = $request->file('imagen');
    $validator = $request->validate([
       'imagen' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:4096',
    ]);
    $imageName = time().'.'.request()->imagen->getClientOriginalExtension();
    request()->imagen->move(public_path('images'), $imageName);
    $noticia->imagen = $imageName;

    $noticia->update();

    return redirect('/mostrar'); //Redirigimos a la la vista para mostrar las noticias 


}
0 голосов
/ 23 марта 2020

Я столкнулся с той же проблемой, но, к счастью, решил эту проблему. Я добавил свое решение ниже, думаю, это поможет вам решить эту проблему

   public function updatePost(Request $request, $id)
   {
    $validatedData = $request->validate([
        'title' => 'required|unique:posts|max:25|min:4',
        'image' => 'mimes:jpeg,jpg,png,JPEG,JPG,PNG | max:100000',
    ]);

    $data = array();
    $data['category_id'] = $request->category_id;
    $data['title'] = $request->title;
    $data['details'] = $request->details;
    $image = $request->file('image');

    if($image)
    {
        $image_name = hexdec(uniqid());
        $ext = strtolower($image->getClientOriginalExtension());
        $image_full_name = $image_name.'.'.$ext;
        $upload_path = 'public/assets/img/';
        $image_url = $upload_path.$image_full_name;
        $success = $image->move($upload_path,$image_full_name);
        $data['image'] = $image_url;
        unlink($request->old_photo);
        $posts = DB::table('posts')->where('posts.id', $id)->update($data);
        if($posts)
        {
            return Redirect()->route('all.posts')->with('success','Posts are inserted successfully');
        }
        else
        {
            return back()->with('error', 'Posts are not inserted successfully');
        }

    }
    else
    {
        $data['image'] = $request->old_photo;
        $posts = DB::table('posts')->where('posts.id', $id)->update($data);
        if($posts)
        {
            return Redirect()->route('all.posts')->with('success','Posts are inserted successfully');
        }
        else
        {
            return back()->with('error', 'Posts are not inserted successfully');
        }
    }
}

edit_post.blade. php

@extends('welcome')
@section('content')
<div class="container">
<div class="row">
  <div class="col-lg-8 col-md-10 mx-auto">
    <p>
      <a href="{{ route('all.posts') }}" class="btn btn-danger">List Posts</a>
    </p>

    @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif

<form action="{{ url('posts.update_posts/'.$posts->id) }}" method="post" enctype="multipart/form-data">
    @csrf
        <div class="control-group">
            <div class="form-group floating-label-form-group controls">
              <div>Category Name</div>
              <label>Category ID</label>
             <select class="form-control" name="category_id">
               @foreach($category as $categories)
             <option value="{{ $categories->id }}" <?php if ($categories->id == $posts->category_id)
                echo "selected"; ?> > {{ $categories->name }} </option>
                @endforeach
             </select>
              <p class="help-block text-danger"></p>
            </div>
        </div>

      <div class="control-group">
        <div class="form-group floating-label-form-group controls">
          <label>Product Title</label>
        <input type="text" name="title" class="form-control" value="{{ $posts->title }}" id="title" required data-validation-required-message="Please product name.">
          <p class="help-block text-danger"></p>
        </div>
      </div>

      <div class="control-group">
        <div class="form-group floating-label-form-group controls">
          <label>Details</label>
          <textarea name="details" rows="5" class="form-control" value="{{ $posts->details }}" id="details"></textarea>
          <p class="help-block text-danger"></p>
        </div>
      </div>

      <div class="control-group">
        <div class="form-group floating-label-form-group controls">
          <label>Product Image</label>
          <input type="file" name="image" class="form-control" id="image"><br/>

        Old Image : <img src="{{ URL::to($posts->image) }}" style="hight: 40px; width: 100px">

        <input type="hidden" name="old_photo" value="{{ $posts->image }}">
        </div>
      </div>

      <br>
      <div id="success"></div>
      <div class="form-group">
        <button type="submit" class="btn btn-success" id="sendMessageButton">Update</button>
      </div>
    </form>
  </div>
</div>
</div>
@endsection
...