2016-09-20 2 views
1

Я использую Laravel для обработки событий, в частности, когда пользователь получает доступ к определенной странице, мой код выглядит следующим образом:Получить переменные из нового события Laravel

Это мой PageController:

public function showTestPage() 
    { 
     //This "redirect to" method is so i don't have to rewrite the event 
      for every method that returns a new view; 
     $this->redirectTo('test'); 
    } 

    public function redirectTo($page) 
    { 
     //This is the data i want to access from my UserAccessedPage Listener 
     event(new UserAccessedPage($page)); 
     return view($page); 
    } 

Наконец вот мой UserAccessedPage СЛУШАТЕЛЬ:

класс LogUserAccessedPage {

/** 
* Create the event listener. 
* 
* @return void 
*/ 
public function __construct() 
{ 

} 

/** 
* Handle the event. 
* 
* @param UserAccessedPage $event 
* @return void 
*/ 
public function handle(UserAccessedPage $event) 
{ 

    Log::create([ 
     'info' => "User ". ucfirst(Auth::user()->name) . " Accessed Page " . Carbon::now()->format('H:i:s'), 
     'user' => ucfirst(Auth::user()->name), 
     'object_affected' => Auth::user()->id, 
     'ip_address' => '', 
     'time' => Carbon::now()->format('H:i:s'), 
     'date' => Carbon::now()->format('Y-m-d') 
    ]); 
} 

}

Как получить эту переменную $ page моему слушателю, чтобы я мог поместить ее в Log :: create (['info' => $ page])? Я надеюсь, что это имеет смысл, что им просит

В соответствии с поручением кода для моего UserAccessedPage:

class UserAccessedPage extends Event 

{ 
    use SerializesModels; 

    public $page; 

    /** 
    * Create a new event instance. 
    * 
    * @return void 
    */ 
    public function __construct($page) 
    { 
     $this->page = $page; 
    } 

    /** 
    * Get the channels the event should be broadcast on. 
    * 
    * @return array 
    */ 
    public function broadcastOn() 
    { 
     return []; 
    } 

Моего EventServiceProvider прояснить некоторую путаницу

protected $listen = [ 
    'App\Events\UserLoggedIn' => [ 
     'App\Listeners\LogUserLoggedIn', 
    ], 
    'App\Events\UserLoggedOut' => [ 
     'App\Listeners\LogUserLoggedOut', 
    ], 
    'App\Events\UserAccessedPage' => [ 
     'App\Listeners\LogUserAccessedPage', 
    ], 
]; 
+0

Можете ли вы показать код для 'UserAccessedPage'? – user3158900

+0

@ user3158900 Sure two secs –

+0

Вы определили в App \ Providers \ EventServiceProvider сопоставление в $ listen? event => прослушиватель? – Adiasz

ответ

1

Я понял это им так глупо -_-

, потому что я был этот кусок кода public function handle(UserAccessedPage $event) это означало, что для класса «UserAccessedPage» может быть доступ через переменную «$ event», поэтому мое окончательное решение просто использовало $event->page, чтобы отобразить переменную страницы.

Благодарим всех вас за помощь :)

1

Попробуйте использовать сеттер и Getters. На странице событий, выполните следующие действия:

public $page 

public function __construct($page) 
{ 
    $this->setPage($page); 
} 

public function setPage($page) { 
    $this->page = $page; 
} 

public function getPage() { 
    return $this->page; 
} 

На вашем приемнике получить страницу:

public function handle(UserAccessedPage $event) 
{ 
    $page = $event->getPage(); 

    Log::create([ 
     'info' => "User ". ucfirst(Auth::user()->name) . " Accessed Page " . Carbon::now()->format('H:i:s'), 
     'user' => ucfirst(Auth::user()->name), 
     'object_affected' => Auth::user()->id, 
     'ip_address' => '', 
     'time' => Carbon::now()->format('H:i:s'), 
     'date' => Carbon::now()->format('Y-m-d') 
    ]); 
} 
+0

Вы разместили это, как я понял: D Большое вам спасибо за это Кстати –