Laravel 目录结构:自定义函数的存放位置 0 个改进

问题

我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么放置它会比较好呢?以下有一种推荐的方式。

方案

  1. 创建文件 app/helpers.php
<?php

// 示例函数
function foo() {
    return "foo";
}
  1. 修改项目 composer.json

在项目 composer.json 中 autoload 部分里的 files 字段加入该文件即可:

{
    ...

    "autoload": {
        "files": [
            "app/helpers.php"
        ]
    }
    ...
}
  1. 然后运行:
$ composer dump-autoload

OK,然后你就可以在任何地方用到 app/helpers.php 中的函数了。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 10

我可能更喜欢app\Helpers\*.php

5年前 评论

那为什么在教程里是放在 app/bootstrap 目录下 ?

5年前 评论
DianWang

@Kevinvinvin 一个是直接在入口文件里require,一个是用composer加载,效果是一样的,方式不同而已

5年前 评论

我可能更喜欢app\Helpers\*.php

5年前 评论

不错::smile:

5年前 评论

helpers.php 放在哪里都可以,只要 composer.json 里能找到

5年前 评论

喜欢跟教程一样 加载引入

5年前 评论
遇见猫不怕

哪些方法适合放在helpers.php,我看到些项目,什么方法都往这里堆,有什么比较好建议吗?

4年前 评论

有些教程是把一些和项目耦合度很高的方法也放helpers,如果判断用户密码是否正确,这些应该独立一些类库处理,我认为helper是一些通用工具方法,最好脱离了这个项目,复制到其他项目也能用,即和业务逻辑无关。比如截取一个url的拓展名,这种方法就放helper 我是这么遵循的

4年前 评论

看来自定义函数的存放位置没能统一啊,看了几篇教程,都是放在 bootstrap 文件夹下的

        "files": [
            "bootstrap/helpers.php"
        ]
4年前 评论
wangchunbo

@keer composer 里 不能写 * 吗?

只能写具体名字。

"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "files": [
            "app/Helpers/heplers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
4年前 评论
keer 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!