php - Eloquent event is not firing -


i want set password when changes in user model. i'm using boot method of model:

<?php namespace app\model;  class user extends \illuminate\database\eloquent\model {     protected $table = 'users';      public static function boot()     {         //die('here'); // happens         user::saving(function ($user) {             //die('here'); // doesn't happen             if ($user->isdirty('password')) {                 $user->password = // hash password...             }         });     } } 

i'm using save() method on model create entry in data base, apparently should fire creating event. i've emptied database table ensure new row being creating (it is), event not fire - , password raw un-ecrypted. way, i'm using illuminate/database ^5.2 in app (not laravel).

update - capsule initialization

$capsule = new illuminate\database\capsule\manager; $capsule->addconnection([     'driver' => 'mysql',     'host' => 'localhost',     'charset' => 'utf8',     'collation' => 'utf8_unicode_ci',     'prefix' => '',     'database' => 'mydb',     'username' => 'myuser',     'password' => 'mypass', ]); $capsule->booteloquent(); 

if want events work, need setup event dispatcher capsule.

first, need add illuminate/events dependencies. add "illuminate/events": "5.2.*" composer.json file:

"require": {     // other requires...     "illuminate/events": "5.2.*" }, 

next, you'll need setup event dispatcher on capsule. make sure before call booteloquent(). docs:

// new capsule...  // add connection...  // set event dispatcher used eloquent models... (optional) use illuminate\events\dispatcher; use illuminate\container\container; $capsule->seteventdispatcher(new dispatcher(new container));  // setup eloquent orm... (optional; unless you've used seteventdispatcher()) $capsule->booteloquent(); 

now should go.

while not related, wanted point out boot method should make sure call parent::boot(); before else (like setting events).


optional solution

if thing you're trying events, can skip altogether setting mutator function password attribute. mutator method called time assign value mutated attribute (i.e. $user->password = "hello").

to this, add following function user model:

public function setpasswordattribute($value) {     $this->attributes['password'] = bcrypt($value); } 

Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -