Laravel - 在服务提供者中要求 PHP 脚本

9 浏览
0 Comments

Laravel - 在服务提供者中要求 PHP 脚本

我对Laravel还比较陌生,根据stackoverflow上的这个答案,我实现了用于辅助函数的服务提供者。它建议在新生成的HelperServiceProvider.php的register函数中添加以下代码:require_once app_path('Helpers/AnythingHelper.php');然而,Laravel文档指出register方法只应用于将事物绑定到容器中:

如前所述,在register方法中,您只应将事物绑定到服务容器中。您不应在register方法中尝试注册任何事件侦听器、路由或任何其他功能。

在我的情况下,应用程序正常运行,register函数中有一个require语句,所以我的问题更多是关于“最佳实践”,而不是让代码正常工作。问题:这种方法(在register方法中使用require语句)是一个好的/可接受的方法,还是应该将require语句移到boot方法中?

0
0 Comments

问题出现的原因是在Laravel中,如果只有方法而不是类,可以通过composer自动加载函数文件来实现,而不需要使用服务提供者的方式。解决方法是通过composer的autoload功能来自动加载文件。

具体步骤如下:

1. 在任意位置创建一个文件,命名为AnythingHelper.php。

2. 在composer.json文件中的autoload字段下的files数组中添加该文件的路径,如下所示:

"autoload": {

// 其他autoload配置

"files": ["app/Helpers/AnythingHelper.php"]

},

3. 运行`composer dump-autoload`命令。

对于类的自动加载,可以使用标准的PSR-4自动加载方式。

如果你有一些简单的函数文件,我不认为使用服务提供者有任何意义,你可以使用composer自动加载这些文件。在Laravel中的helper文件就是这样实现的。可以查看Laravel的composer.json文件(https://github.com/laravel/framework/blob/5.5/composer.json),你会看到`src/Illuminate/Foundation/helpers.php`以这种方式加载。

理论上来说,如果想将函数文件放在服务提供者中,应该将require语句移到boot方法中。根据文档的解释,register方法中除了绑定(bind)、单例(singleton)、实例(instance)等方法绑定到容器之外,其他操作都不建议在register方法中进行。因此,其他操作应默认移至boot方法中。

0