Jednoduchý e-shop Laravel 5.3 část 9 – editace produktů v administraci
- Jednoduchý e-shop Laravel 5.3 část 1 – Instalace a databáze
- Jednoduchý e-shop Laravel 5.3 část 2 – databáze seeder a homepage
- Jednoduchý e-shop Laravel 5.3 část 3 – košík a přidání zboží do něj
- Jednoduchý e-shop Laravel 5.3 část 4 – dokončení objednávky
- Jednoduchý e-shop Laravel 5.3 část 5 – odeslání mailu pro objednávku
- Jednoduchý e-shop Laravel 5.3 část 6 – základ administrační části
- Jednoduchý e-shop Laravel 5.3 část 7 – přehled objednávak v administraci
- Jednoduchý e-shop Laravel 5.3 část 8 – detail objednávky v administraci
- Jednoduchý e-shop Laravel 5.3 část 9 – editace produktů v administraci
- Jednoduchý e-shop Laravel 5.3 část 10 – přidání zboží do košíku AJAXEM
- Jednoduchý e-shop Laravel 5.3 část 11 – malé vylepšení modal okno pro přidání do košíku
Takže dnes bych chtěla tento jednoduchý e-shop dokončit a to administrací produktů.
1 |
php artisan make:controller ProductController |
a ProductController si upravíme pro zobrazení všech produktů z databáze.
1 2 3 4 5 |
public function index() { $products = Product::all(); return view('admin.products', ['products' => $products]); } |
Přidáme si do skupiny admin v routes/web.php routu pro zobrazení administrace
1 |
Route::get('products', 'ProductController@index'); |
a samozřejmě ještě view pro zobrazení v resources/admin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
@extends('layouts.admin') @section('content') <div class="row"> <div class="col-md-12"> <h1>Seznam zboží</h1> <table class="table table-bordered table-striped"> <thead> <th>Číslo</th> <th>Název</th> <th>Cena</th> </thead> <tbody> @foreach($products as $product) <tr> <th><a href="{{ URL::to('/admin/product/edit/'.$product->id) }}">{{ $product->id }}</a></th> <th>{{ $product->name }}</th> <th>{{ $product->price }}</th> </tr> @endforeach </tbody> </table> </div> </div> @stop |
Teď si přidáme ještě možnost editace produktů v administraci. Chtěla bych si v administraci i přidat třeba obrázek k produktu a k tomu použijeme skvělý balíček Intervention image takže nejprve jej nainstalujeme
1 |
composer require intervention/image |
upravíme app/config/app.php to do providers přidáme
1 |
Intervention\Image\ImageServiceProvider::class |
a do aliases přidáme
1 |
'Image' => Intervention\Image\Facades\Image::class |
ProductController si doplníme o editaci
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public function edit($id) { $product = Product::find($id); return view('admin.product_edit', ['product' => $product]); } public function update($id, Request $request) { $product = Product::find($id); $product->name = $request->name; $product->description = $request->description; $product->price = $request->price; if($request->image) { $image = $request->image; $filename = time() . '.' . $image->getClientOriginalExtension(); $path = public_path('products/' . $filename); Image::make($image->getRealPath())->resize(180, 240)->save($path); $product->image = $filename; } $product->save(); return redirect('/admin/products'); } |
Ještě přidáme administrační routy
1 2 |
Route::get('product/edit/{id}', 'ProductController@edit'); Route::post('product/update/{id}', 'ProductController@update'); |
a view pro editaci
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
@extends('layouts.admin') @section('content') <div class="row"> <div class="col-md-12"> <form action="/admin/product/update/{{ $product->id }}" enctype="multipart/form-data" method="POST"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <div class="form-group"> <label for="name">Název</label> <input type="text" name="name" class="form-control" value="{{ $product->name }}"> </div> <div class="form-group"> <label for="description">Popis</label> <textarea name="description" class="form-control">{{ $product->description }}</textarea> </div> <div class="form-group"> <label for="price">Cena</label> <input type="text" name="price" class="form-control" value="{{ $product->price }}"> </div> <div class="form-group"> <label for="image">Obrázek</label> <input type="file" name="image" class="form-control" value="{{ $product->image }}"> </div> <button type="submit" class="btn btn-default">Uložit</button> </form> </div> </div> @stop |
a ještě je potřeba v databázi přidat do tabulky products sloupec image pro uložení obrázku k produktu
1 |
php artisan make:migration add_image_to_product |
soubor si upravíme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class AddImageToProduct extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('products', function($table) { $table->string('image'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('products', function($table) { $table->dropColumn('image'); }); } } |
nyní jen spustíme
1 |
php artisan migrate |
a otestujeme editaci produktu v adninistraci.