Livewire Last updated: 2021-01-26 21:57:45

  • creare il componente in laravel\Modules\Nome_Modulo\Http\Livewire\nome_componente.php

esempio di componente registrato nel modulo LU (preso dall'esempio di https://www.nicesnippets.com/blog/laravel-livewire-crud-with-bootstrap-modal-example)

<?php

namespace Modules\LU\Http\Livewire;

use Livewire\Component;
use Modules\LU\Models\User;

class Users extends Component {
    public $users;
    public $name;
    public $email;
    public $user_id;
    public $updateMode = false;

    public function render() {
        $this->users = User::all();

        return view('lu::livewire.users');
    }

    private function resetInputFields() {
        $this->name = '';
        $this->email = '';
    }

    public function store() {
        $validatedDate = $this->validate([
            'name' => 'required',
            'email' => 'required|email',
        ]);

        User::create($validatedDate);

        session()->flash('message', 'Users Created Successfully.');

        $this->resetInputFields();

        $this->emit('userStore'); // Close model to using to jquery
    }

    public function edit($id) {
        $this->updateMode = true;
        $user = User::where('id', $id)->first();
        $this->user_id = $id;
        $this->name = $user->name;
        $this->email = $user->email;
    }

    public function cancel() {
        $this->updateMode = false;
        $this->resetInputFields();
    }

    public function update() {
        $validatedDate = $this->validate([
            'name' => 'required',
            'email' => 'required|email',
        ]);

        if ($this->user_id) {
            $user = User::find($this->user_id);
            $user->update([
                'name' => $this->name,
                'email' => $this->email,
            ]);
            $this->updateMode = false;
            session()->flash('message', 'Users Updated Successfully.');
            $this->resetInputFields();
        }
    }

    public function delete($id) {
        if ($id) {
            User::where('id', $id)->delete();
            session()->flash('message', 'Users Deleted Successfully.');
        }
    }
}
  • creare relativa blade in laravel\Modules\Nome_Modulo\Resources\views\livewire\nome_componente.blade.php
  • (istruzioni temporanee perchè verrà automatizzato il tutto): aggiungere il componente creato in laravel\Modules\Nome_Modulo\Providers\Nome_ModuloServiceProvider

per registrare un componente nel modulo, intanto assicurarsi che ogni Nome_ModuloServiceProvider abbia all'interno della funzione bootCallback la riga "$this->registerLivewireComponents();",

che si ottine estendendo il Nome_ModuloServiceProvider con XotBaseServiceProvider.

Verra automaticamente generato un file laravel\Modules\Nome_Modulo\Http\Livewire\_components.json con all'interno un array degli elementi creati per quel modulo.

NOTA BENE: ad ogni creazione di un nuovo componente livewire, bisogna cancellare il relativo _components.json, in modo che venga ricreato automaticamente (il file non si aggiorna).