lundi 16 avril 2018

Laravel : Mapping between Observer and Service Provider

I have created a Observer. But the creating event of ItemObserver is not working when save() event fire from ItemController.

What i am doning wrong can anybody help me out?

In this code, ItemObserver is used to capitalize the name field of Item model when save event fire.

>app
 >Observers
  >ItemObserver.php
 >Providers
  >ItemModelServiceProvider.php
 >Http
  >Controllers
   >ItemController.php
 >Models
  >Item.php

ItemObserver.php

namespace App\Observers;

use App\Models\Item;

class ItemObserver
{
    /**
     * Accept Event And Done with Model
     *
     * @param Model $item
     * @return void
     */
    public function creating(Item $item)
    {
        $item->name = strtoupper($item->name);
    }
}

ItemModelServiceProvider.php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Models\Item;
use App\Observers\ItemObserver;

class ItemModelServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        Item::observe(ItemObserver::class);
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

ItemController.php

namespace App\Http\Controllers;

use App\Models\Item;
use Illuminate\Http\Request;

class ItemController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $items = \App\Models\Item::orderBy('id', 'desc')->get();

        return view('items/list', compact('items'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('items/create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $item = new Item;
        $item->name = $request->get('name');
        $item->price = $request->get('price');
        $item->save();

        \Session::flash('msg', 'Item has been saved.');

        return redirect('items')->with('msg', 'Item has been saved.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Item  $item
     * @return \Illuminate\Http\Response
     */
    public function show(Item $item)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Item  $item
     * @return \Illuminate\Http\Response
     */
    public function edit(Item $item)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Item  $item
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Item $item)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Item  $item
     * @return \Illuminate\Http\Response
     */
    public function destroy(Item $item)
    {
        //
    }
}

Item.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Item extends Model
{

}



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire