我很困惑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控制器方法,它只是触发它。如果专家清除我的困惑,我感激不尽。
答案 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;监听器中的代码块。
请注意,我更改了事件的名称,表示它与被调用函数没有直接关系。