Laravel的事件倾听和解雇

时间:2014-08-03 11:46:01

标签: javascript php laravel

我很困惑Laravel听力和射击之间的区别。

基本上,我知道他们的概念,但在实践中我无法理解它们。

好吧,我希望在用户访问pages / show时回显文本。这是我的控制器:

class Pages extedns Controller
{
 function show ()
 {
    echo "Welcome to our website.";
 }
}

现在这是我附加到global.php的事件代码块:

Event::listen("Pages.show", function(){
    echo "You have listened to one event!";
});

现在,应该如何触发上述事件?我怎么能期望它起作用?因为这种方法不起作用。但是,当我将以下行添加到此代码时,它可以工作:

Event::fire("Pages.show");

现在,问题是我访问的每个页面和控制器中的事件都是FIRED。它不考虑Pages.show控制器方法,它只是触发它。如果专家清除我的困惑,我感激不尽。

1 个答案:

答案 0 :(得分:1)

事件监听器只是由字符串标识,它们与应用程序的任何其他部分无关,以简单的方式说明这可能有类似的内容

Event::listen("logged",function($user){ 
  logEvent("{$user} logged in."); // Supposing that logEvent would write the message to a file.
});

每当用户进行身份验证时,通过该含义密码和用户名存在并匹配,您就会触发该事件,它看起来像这样

if($user->attemptLogin("myuser","password")){ //If the authentication function returns true
   Event::fire("logged",array($user->name)); //Fire the event and pass the username to be logged.
}

请注意所有Laravel开发人员:我知道有一种身份验证方法,但我试图在这里保持简单。

所以基本上你正在做的是你给一大块代码一个字符串标识符,你可以通过触发它的事件来调用代码块。

现在,离开我的例子,你试图听一个函数,因为我说事件标识符只是与其他任何东西没有关联的字符串,所以解决方法是简单地在你的函数中调用事件fire:

<强>监听器:

Event::listen("showedPage", function(){
    echo "You have listened to one event!";
});

<强>触发:

class Pages extends Controller
{
 function show ()
 {
    echo "Welcome to our website.";
    Event::fire("showedPage");
 }
}

因此,每次调用show函数时,您都会触发&#34;触发&#34;或者&#34;火&#34;监听器中的代码块。

请注意,我更改了事件的名称,表示它与被调用函数没有直接关系。