CRUD: Ejemplo general

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\models\seguridad\Cineasta;
use App\models\seguridad\Pelicula;
use Faker\Provider\Image;
use Intervention\Image\ImageManagerStatic;
use Illuminate\Support\Facades\DB;

class PeliculasController extends Controller
{
    // ****************************************
    // ****************************************
    public function block($id, $value, Request $request) {
        Pelicula::find(decrypt($id))->update(['visible' => $value]);
        if ($value == 0) {
            $message = "Película desactivada";
        }
        else {
            $message = "Película activada";
        }
        return redirect()->back()->with('mensaje',$message);
    }

    // ****************************************
    // ****************************************
    public function create()  {
        $cineastas = Cineasta::orderBy('nombre')->get();
        return view('admin.pelicula.create', compact('cineastas'));
    }

    // ****************************************
    // ****************************************
    public function delete($id) {
        Pelicula::find(decrypt($id))->delete();
        // No hay que retornar nada pq se llama desde el funciones.js
        // return redirect()->back()->with('mensaje', "Borrado correctamente");
      }

    // ****************************************
    // ****************************************
    public function edit($id) {
        $cineastas = Cineasta::orderBy('nombre')->get();
        $pelicula = Pelicula::find(decrypt($id));
        $dirActivo = Cineasta::find($pelicula->id_director);
        $nomDirector = $dirActivo->nombre;
        return view('admin.pelicula.edit', compact('cineastas', 'pelicula','nomDirector'));
      }

    // ********************************
    // ********************************
    public function generarSlug($titulo) {
        $slug = str_slug($titulo);
        $arrAux = Pelicula::select('slug')->where('slug', $slug)->get();
        $cont = 1;
        while (count($arrAux) == 1) {
            $slug .= "-".$cont;
            $arrAux = Pelicula::select('slug')->where('slug', $slug)->get();
            $cont++;
        }
        return $slug;
    }

    // ****************************************
    // ****************************************
    public function index() {
        $arrPel = DB::table('peliculas')
                ->join('cineastas', 'cineastas.id', '=', 'peliculas.id_director')
                ->select('peliculas.*', 'cineastas.nombre as nomCineasta')
                ->get();
        return view('admin.pelicula.list', compact('arrPel'));
      }


    // ****************************************
    // ****************************************
    public function show($id) {
        $pelicula = DB::table('peliculas')
                ->join('cineastas', 'cineastas.id', '=', 'peliculas.id_director')
                ->select('peliculas.*', 'cineastas.nombre as nomCineasta')
                ->where('peliculas.id', decrypt($id))
                ->get();
        return view('admin.pelicula.show', compact('pelicula'));
    }

    // ***********************************
    // **********************************
    public function store(Request $request)  {
        $request->validate([
            'titulo'=>'required|max:50',
            'anno'=>'required|max:4',
            'nota'=>'required|max:2',
            'id_director'=>'required|integer',
            'numNom'=>'required|integer',
            'numOsc'=>'required|integer',
            'foto_pelicula'=>'image|mimes:jpeg,png,jpg,gif|max:2048'
        ]);

        $slug = $this->generarSlug($request->get("titulo")." ".$request->get("anno"));

        $pelicula = new Pelicula([
            'titulo' => $request->get("titulo"),
            'slug' => $slug,
            'anno' => $request->get("anno"),
            'nota' => $request->get("nota"),
            'id_director' => $request->get("id_director"),
            'numNom' => $request->get("numNom"),
            'numOsc' => $request->get("numOsc"),
            'foto_pelicula' => 'default.jpg',
            'visible' => 1
        ]);

        if ($request->has('foto_pelicula')) {
            $foto_pelicula = $request->file('foto_pelicula');
            // $filename = time().'.'.request()->foto_pelicula->getClientOriginalExtension();
            $filename = substr($slug,0,25).'.'.request()->foto_pelicula->getClientOriginalExtension();
            $img = ImageManagerStatic::make($foto_pelicula)->resize(64, 64);
            $img->save('assets/fotos_peliculas/'.$filename);
            $pelicula->foto_pelicula = $filename;
        }
        $id = $pelicula->save();

        return redirect()->route('peliculas_list')->with('success', 'Película guardado correctamente!');
    }

     // ****************************************
    // ****************************************
    public function update(Request $request, $id)  {
        $pelicula = Pelicula::find(decrypt($id));

        $request->validate([
          'titulo' => 'required',
          'anno' => 'required',
          'nota' => 'required',
          'id_director' => 'required',
          'numNom' => 'required',
          'numOsc' => 'required',
          'foto_pelicula'=>'image|mimes:jpeg,png,jpg|max:2048'
        ]);

        // Lo primero ver si el título ha cambiado para generar un nuevo slug
        $arr = Pelicula::select('titulo')->where('id', decrypt($id))->get();
        $slug = "";
        if ($arr[0]->titulo != request('titulo')) {
            $slug = $this->generarSlug($request->get("titulo")." ".$request->get("anno"));
            $pelicula->slug = $slug;
        }

        $pelicula->titulo = request('titulo');
        $pelicula->anno = request('anno');
        $pelicula->nota = request('nota');
        $pelicula->id_director = request('id_director');
        $pelicula->numNom = request('numNom');
        $pelicula->numOsc = request('numOsc');

        if ($request->has('foto_pelicula')) {
            $foto_pelicula = $request->file('foto_pelicula');
            $filename = substr($pelicula->slug,0,25).'.'.request()->foto_pelicula->getClientOriginalExtension();
            $img = ImageManagerStatic::make($foto_pelicula)->resize(64, 64);
            $img->save('assets/fotos_peliculas/'.$filename);
            $pelicula->foto_pelicula = $filename;
        }

        $pelicula->save();
        return redirect()->route('peliculas_list', ['id' => $id])->with('success','Registro actualizado correctamente.');
      }
}


Una forma quizás más fácil de guardar las imágenes en store sería:
$user = $request->all();
if ($request->has('foto_id')) {
$nomFoto = time()."_".request()->foto_id->getClientOriginalName();
$request->file('foto_id')->move("images", $nomFoto);
$fotoAux = Foto::create(['ruta_foto'=>$nomFoto]);
$user["foto_id"] = $fotoAux->id;
}
$user["password"] = bcrypt(request()->password);
User::create($user);

El update tb se puede hacer más fácil:
$id = decrypt($id);
$user = User::find($id);
$arrAux = $request->all();
if ($request->has('foto_id')) {
$nomFoto = time()."_".request()->foto_id->getClientOriginalName();
$request->file('foto_id')->move("images", $nomFoto);
$fotoAux = Foto::create(['ruta_foto'=>$nomFoto]);
$arrAux["foto_id"] = $fotoAux->id;
}
$user->update($arrAux);
return redirect()->route('users.index');

No hay comentarios:

Publicar un comentario