Jak použít interface v Laravelu
Tak si pohrávám s myšlenkou jak vylepšit jednoduchý e-shop a v rámci zkoušení jsem si vyzkoušela způsob jakým použít interface nebo jak tomu říkají Contract v Laravelu.
Vytvořím si v app\storage\Contracts\StorageInterface.php s
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App\Storage\Contracts; interface StorageInterface { public function set($index, $value); public function get($index); public function all(); } |
a v app\storage\SessionStorage.php si vytvořím následující implementaci s použitím session
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<?php namespace App\Storage; use App\Storage\Contracts\StorageInterface; use Session; class SessionStorage implements StorageInterface { protected $cart; public function __construct($cart = 'default') { if(! Session::has($cart)) { Session::put($cart, []); } $this->cart = $cart; } public function set($index, $value) { return Session::put("{$this->cart}.{$index}", $value); } public function get($index) { if (! $this->exists($index)) { return null; } return Session::get("$this->cart.{$index}"); } public function all() { return Session::get("{$this->cart}"); } |
v app\providers\StorageServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class StorageServiceProvider extends ServiceProvider { public function register() { $this->app->bind('App\Storage\Contracts\StorageInterface', 'App\Storage\SessionStorage'); } } |
no a nakonec config\app.php si přidám provider
1 |
App\Providers\StorageServiceProvider::class, |
a v controlleru pak použiji např.
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 29 30 31 32 33 34 35 36 37 |
<?php namespace App\Http\Controllers; use App\Storage\Contracts\StorageInterface; use Illuminate\Http\Request; class StorageController extends Controller { private $storage; public function __construct(Request $request, StorageInterface $storage) { $this->storage = $storage; } public function index() { $array1 = array( 'qty' => 1, 'size' => 'L' ); $array2 = array( 'qty' => 2, 'size' => 'M' ); $this->storage->set(1, $array1); $this->storage->set(2, $array2); var_dump($this->storage->all()); } } |