【问题标题】:Initialize helper class in Laravel在 Laravel 中初始化辅助类
【发布时间】:2017-10-08 02:53:36
【问题描述】:

我写了一个简单的帮助类,将它放在app\Helpers\MyHelper.php 中,并在app.php 配置文件中为它创建了一个别名:

    'MyHelper' => App\Helpers\MyHelper::class,

问题是,现在我需要使用类构造函数来初始化其中的一些默认值。但是,__construct 函数永远不会被调用。显然,因为它永远不会被初始化。

问题是,我如何(或在哪里)正确初始化助手类,以便它可以初始化它的默认值?

我的第一个想法:AppServiceProvider.php 文件和boot() 函数。

我在那里放置了一个new MyHelper(); 行并且它正在工作,但是我想知道这是否是正确的方法?

【问题讨论】:

  • 您能否展示您的班级背景以正确理解问题?
  • @Gayan 你是什么意思?只需考虑一个带有构造函数的普通类。我想确定按照我描述的方式初始化它是否是一种合适的方式。

标签: php laravel class laravel-5


【解决方案1】:

您可以创建具有静态类的辅助类,因此无需创建该类的实例 例如

<?php

namespace App\Helpers;

class HelperFunction {

    public static function createGroup() {

}

所以你可以使用use关键字在你的控制器中导入类并访问

HelperFunction::createGroup();

【讨论】:

  • 我知道。但是我需要初始化,因为帮助程序正在将语言文件加载到数组 + 它在初始化时设置了不同的共享变量,并且在每个单独的函数调用中加载这些变量是愚蠢的。
  • 你可以在 composer.json 中添加该类,然后运行 ​​composer dump autoload . 这样它就会自动加载
【解决方案2】:

在一般情况下,服务提供商可用于引导您的应用程序。文档没有太多关于 AppServiceProvider 的说明,但它似乎可以引导您的应用程序。

如果您想走安全的路线,您可以使用php artisan make:provider MyHelperServiceProvider 创建一个新的服务提供者,并将其添加到您的config/app.php 文件的providers 数组中。

它看起来与AppServiceProvider 相同,但根据您当前的代码库,将帮助器放入自己的服务提供程序可能会更简洁。

我也只是一个初学者,但对我来说似乎都很好。

更新:好的,在文档中找到了重要部分:https://laravel.com/docs/5.5/lifecycle

最后一段说:

默认情况下,AppServiceProvider 是相当空的。此提供程序是添加应用程序自己的引导和服务容器绑定的好地方。当然,对于大型应用程序,您可能希望创建多个服务提供者,每个服务提供者都有更细粒度的引导类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2013-08-15
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多