gpt4 book ai didi

php - 如何在 laravel 中创建别名?

转载 作者:行者123 更新时间:2023-12-04 00:05:47 24 4
gpt4 key购买 nike

我要创建aliases在 laravel 中,如 Auth这样我就可以在 View 中使用它,就像
Auth::user() .

例如,我想从我的设置表中返回数据并想像使用它一样
Setting::method()->value .在 View 中和 use Setting在 Controller 中。

我应该为此创建什么 FacadesService Providers ?给我一些程序。
我尝试使用 Service Providers但我很困惑如何在那里调用数据库。

最佳答案

这将是一个很长的答案,使用 Laravel 5.4。

  • 您需要一个服务类(在这种情况下,它是外观背后的具体类)。我做到了app/Services文件夹:
  • namespace App\Services;

    use Illuminate\Database\DatabaseManager;

    class Setting
    {
    protected $db;

    public function __construct(DatabaseManager $db)
    {
    $this->db = $db;
    }

    public function method()
    {
    return;
    }
    }
    如您所见,我将数据库注入(inject)到该具体类中。这就是 Laravel IoC 的魔力。它会自动将任何依赖项解析到您的具体类中。
  • 接下来,创建一个立面。我做到了app/Facades文件夹:
  • namespace App\Facades;

    use Illuminate\Support\Facades\Facade;

    class Setting extends Facade
    {
    /**
    * Get the registered name of the component.
    *
    * @return string
    */
    protected static function getFacadeAccessor()
    {
    return 'setting';
    }
    }
    注意 settinggetFacadeAccessor 返回的字符串.您需要稍后将此服务名称注册到 Container (IoC)。这个外观背后的神奇之处在于,它会自动调用(代理)任何静态方法到具体类的实例方法,在这种情况下你可以调用:
    Service::method()
  • 将服务注册到容器。在您的AppServiceProvider
  • namespace App\Providers;

    use App\Services\Setting;
    use Illuminate\Support\ServiceProvider;

    class AppServiceProvider extends ServiceProvider
    {
    // ...

    /**
    * Register any application services.
    *
    * @return void
    */
    public function register()
    {
    // ...

    $this->app->singleton(Setting::class);
    $this->app->alias(Setting::class, 'setting');
    }
    }
    在此服务提供商中,我声明 Setting服务是单例服务。这意味着,您可以使用 Setting无需重新初始化类即可在另一个地方提供服务,换句话说,您在文件中使用相同的实例。最后,我告诉容器 Setting服务有另一个别名,名称 setting ,所以Container可以判断 App/Facade/Setting后面是哪个Concrete Class .
  • 如 apokryfos 所述,用于别名。在 config/app.php 中注册您的外观别名, 找到 aliases 部分并添加这一行:
  • 'aliases' => [

    // ...

    'Setting' => App\Facades\Setting::class,

    ],
    在此之后,您可以像这样调用您的外观:
    use Setting;

    Setting::method();
    希望这可以帮助。

    关于php - 如何在 laravel 中创建别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45794683/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com