如何在Laravel中向所有控制器共享一种方法?

knu*_*bbe 1 laravel

如何向所有具有不同DI,视图和参数的控制器共享一种方法?我需要这样的东西:

public function method(Model $model)
    {
        $baseData = [
            'model' => $model,
            'route' => route('$route', [$param => $model]),
        ];

        return view($view);
    }
Run Code Online (Sandbox Code Playgroud)

Sal*_*301 5

所有控制器App\Http\Controllers\Controller都可以扩展,因此您可以将其放置在此处

<?php

namespace App\Http\Controllers;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function method(Model $model, $route, $param, $view)
    {
        // Declared but not used
        $baseData = [
            'model' => $model,
            'route' => route($route, [$param => $model]),
        ];

        return view($view);
    }
}
Run Code Online (Sandbox Code Playgroud)

并与 $this->method()

例如在 HomeController

<?php

namespace App\Http\Controllers;

use App\User;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $user = User::first();
        return $this->method($user, 'home', 'user', 'welcome');
    }
}
Run Code Online (Sandbox Code Playgroud)

现在访问domain.tld/home 将返回welcome视图

希望这可以帮助