Browse Source

Use route model binding and request validation

pull/14/head
Nafies Luthfi 8 years ago
parent
commit
9387760d43
  1. 28
      app/Http/Controllers/ProductsController.php
  2. 12
      app/Http/Controllers/UnitsController.php
  3. 2
      tests/Feature/ManageUnitsTest.php

28
app/Http/Controllers/ProductsController.php

@ -4,7 +4,6 @@ namespace App\Http\Controllers;
use App\Product; use App\Product;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use PDF;
class ProductsController extends Controller class ProductsController extends Controller
{ {
@ -17,9 +16,9 @@ class ProductsController extends Controller
$query->where('name', 'like', '%'.$q.'%'); $query->where('name', 'like', '%'.$q.'%');
} }
}) })
->orderBy('name')
->with('unit')
->paginate(25);
->orderBy('name')
->with('unit')
->paginate(25);
if (in_array($request->get('action'), ['edit', 'delete']) && $request->has('id')) { if (in_array($request->get('action'), ['edit', 'delete']) && $request->has('id')) {
$editableProduct = Product::find($request->get('id')); $editableProduct = Product::find($request->get('id'));
@ -30,46 +29,47 @@ class ProductsController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$this->validate($request, [
$newProduct = $request->validate([
'name' => 'required|max:20', 'name' => 'required|max:20',
'cash_price' => 'required|numeric', 'cash_price' => 'required|numeric',
'credit_price' => 'nullable|numeric', 'credit_price' => 'nullable|numeric',
'unit_id' => 'required|numeric',
'unit_id' => 'required|numeric|exists:product_units,id',
]); ]);
Product::create($request->only('name', 'cash_price', 'credit_price', 'unit_id'));
Product::create($newProduct);
flash(trans('product.created'), 'success'); flash(trans('product.created'), 'success');
return redirect()->route('products.index'); return redirect()->route('products.index');
} }
public function update(Request $request, $productId)
public function update(Request $request, Product $product)
{ {
$this->validate($request, [
$productData = $request->validate([
'name' => 'required|max:20', 'name' => 'required|max:20',
'cash_price' => 'required|numeric', 'cash_price' => 'required|numeric',
'credit_price' => 'nullable|numeric', 'credit_price' => 'nullable|numeric',
'unit_id' => 'required|numeric|exists:product_units,id',
]); ]);
$routeParam = $request->only('page', 'q'); $routeParam = $request->only('page', 'q');
$product = Product::findOrFail($productId)->update($request->only('name', 'cash_price', 'credit_price', 'unit_id'));
$product->update($productData);
flash(trans('product.updated'), 'success'); flash(trans('product.updated'), 'success');
return redirect()->route('products.index', $routeParam); return redirect()->route('products.index', $routeParam);
} }
public function destroy(Request $request, $productId)
public function destroy(Request $request, Product $product)
{ {
$this->validate($request, [
$requestData = $request->validate([
'product_id' => 'required|exists:products,id', 'product_id' => 'required|exists:products,id',
]); ]);
$routeParam = $request->only('page', 'q'); $routeParam = $request->only('page', 'q');
if ($request->get('product_id') == $productId && Product::findOrFail($productId)->delete()) {
if ($requestData['product_id'] == $product->id && $product->delete()) {
flash(trans('product.deleted'), 'success'); flash(trans('product.deleted'), 'success');
return redirect()->route('products.index', $routeParam); return redirect()->route('products.index', $routeParam);
@ -86,7 +86,7 @@ class ProductsController extends Controller
return view('products.price-list', compact('products')); return view('products.price-list', compact('products'));
// $pdf = PDF::loadView('products.price-list', compact('products'));
// $pdf = \PDF::loadView('products.price-list', compact('products'));
// return $pdf->stream('price-list.pdf'); // return $pdf->stream('price-list.pdf');
} }
} }

12
app/Http/Controllers/UnitsController.php

@ -21,24 +21,24 @@ class UnitsController extends Controller
public function store(Request $request) public function store(Request $request)
{ {
$this->validate($request, [
$newUnit = $request->validate([
'name' => 'required|max:20', 'name' => 'required|max:20',
]); ]);
Unit::create($request->only('name'));
Unit::create($newUnit);
flash(trans('unit.created'), 'success'); flash(trans('unit.created'), 'success');
return redirect()->route('units.index'); return redirect()->route('units.index');
} }
public function update(Request $request, $unitId)
public function update(Request $request, Unit $unit)
{ {
$this->validate($request, [
$unitData = $request->validate([
'name' => 'required|max:20', 'name' => 'required|max:20',
]); ]);
$unit = Unit::findOrFail($unitId)->update($request->only('name'));
$unit->update($unitData);
flash(trans('unit.updated'), 'success'); flash(trans('unit.updated'), 'success');
@ -50,7 +50,7 @@ class UnitsController extends Controller
$this->validate($request, [ $this->validate($request, [
'unit_id' => 'required|exists:product_units,id|not_exists:products,unit_id', 'unit_id' => 'required|exists:product_units,id|not_exists:products,unit_id',
], [ ], [
'unit_id.not_exists' => trans('unit.undeleted'),
'unit_id.not_exists' => trans('unit.undeleteable'),
]); ]);
if ($request->get('unit_id') == $unit->id && $unit->delete()) { if ($request->get('unit_id') == $unit->id && $unit->delete()) {

2
tests/Feature/ManageUnitsTest.php

@ -98,7 +98,7 @@ class ManageUnitsTest extends BrowserKitTestCase
$this->press(trans('app.delete_confirm_button')); $this->press(trans('app.delete_confirm_button'));
$this->see(trans('unit.undeleted'));
$this->see(trans('unit.undeleteable'));
$this->seePageIs(route('units.index', ['action' => 'delete', 'id' => $unitId])); $this->seePageIs(route('units.index', ['action' => 'delete', 'id' => $unitId]));
$this->seeInDatabase('product_units', [ $this->seeInDatabase('product_units', [

Loading…
Cancel
Save