在 Laravel 中编写需要在任何控制器之前执行的函数

Kan*_*ngo 3 laravel-4

嗨,我正在 Laravel 做一个网站。我试图做一个需要在任何控制器之前执行的函数。

示例: 我有类似的功能

function xyz(){
    //do code here
}
Run Code Online (Sandbox Code Playgroud)

此功能需要在用户通过刷新页面或执行一些 ajax 请求来访问站点时执行。

我知道使用 codeigniter 有一种方法可以使用钩子来做到这一点

$hook['pre_controller'] = array(
        'class'    => 'MyClass',
        'function' => 'Myfunction',
        'filename' => 'Myclass.php',
        'filepath' => 'hooks',
        'params'   => array('beer', 'wine', 'snacks')
);
Run Code Online (Sandbox Code Playgroud)

laravel 有什么方法可以做到这一点?

Nir*_*hah 6

您可以使用 Laravel 中间件来实现这一点。中间件可以为所有控制器/路由注册为全局,并允许您执行该功能(或者您可以使用路由器组将其注册为路由子集)。

例子:

<?php

namespace App\Http\Middleware;

use Closure;

class MyMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // call your function
        $this->xyz();

        return $next($request);
    }

    public function xyz()
    {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅有关 MiddlewareLaravel 文档

  • 你为什么把它标记为 Laravel 5?在 Laravel 4.2 中,你将不得不使用过滤器。 (2认同)