【问题标题】:Laravel's Events listening and firingLaravel 的事件监听和触发
【发布时间】:2014-08-03 20:20:03
【问题描述】:

我很困惑 Laravel 监听和触发之间有什么区别。

基本上,我知道他们的概念,但在实践中我无法弄清楚。

好吧,我想在用户访问页面/节目时回显一个文本。这是我的控制器:

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");

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

【问题讨论】:

    标签: javascript php laravel


    【解决方案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 开发人员请注意:我知道有一种身份验证方法,但我试图在这里保持简单。

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

    现在,远离我的示例,您尝试侦听一个函数,正如我所说,事件标识符只是不链接到任何其他内容的字符串,因此解决方案是简单地将事件触发在您的函数中调用为:

    听众:

    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 函数时,您都会“触发”或“触发”侦听器内的代码块。

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

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2020-11-29
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2015-11-22
      相关资源
      最近更新 更多