Laravel 添加自定义助手函数

前言

在学习完教程中添加自定义助手函数文件时,还是得记录一下,感觉对composer知道的东西太少了,一些命令到底做了什么还是不知道,总结一下。

添加自定义助手函数文件

在开发项目的时候,有时候会定义一些函数,而这些函数又不能放在Laravel框架的助手函数文件中,如果我们把代码部署到生产环境中,再使用composer install安装扩展,又会覆盖我们之前修改的文件。

可见添加的函数必须要定义在我们的文件中,而且这个文件必须要纳入到git仓库中。这么一来觉得放在app目录还不错,这个目录是应用相关的目录,像中间件、模型、控制器都在这个这个目录。

所以我们在app目录下添加helpers.php文件,添加的函数就可以定义在这个文件中了。

自动加载助手函数

在上面我们创建了助手函数文件,把函数定义在app/helpers.php文件中了,但是这个文件不会被composer自动加载,如果要composer自动加载器加载我们定义的函数文件,必须要告诉composer

如何告诉composer加载我们定义的助手函数文件呢,很简单,在项目根目录中的composer.json文件添加即可,怎么添加也是有讲究的,我把我添加的结果放在这里。

...
"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "files": [
            "app/helpers.php"  #这行便是添加的助手函数
        ]
    },
.....

通过上面贴出的代码我们可以知道,在autoload参数下的files参数可以定义要添加的文件,这个文件在添加时要注意路径,首先助手函数文件helpers.phpapp目录下,而app目录和composer.json是在同一个目录下,所以添加助手函数时应该这么写app/helpers.php,也就是说通过这个相对路径可以找到对对应的文件,不然composer的文件加载会失败。

定义了是不是就完事了呢,还没有,composer在加载助手函数文件时,并不是通过composer.json文件来记载函数文件,而是通过composer加载器定义的几个文件,每次从这些文件中加载文件。

所以我们在定义了函数文件后需要执行composer dumpauotload指令,通过composer程序来生产加载文件。执行后会修改vendor/composer目录下的autoload_static.phpauoload_files.php文件。

到底在文件中修改了什么呢,其实就是把定义的helpers.php添加到这个两个文件中,看下添加后的文件内容。

// autoload_static.php
class ComposerStaticInit49922490dbe4935d5c7b9f60b23ceb32
{
    public static $files = array (
       // ......
        'ed962a97bd972bc82007176b647d4e36' => __DIR__ . '/..' . '/facade/ignition/src/helpers.php',
        'b4e3f29b106af37a2bb239f73cdf68c7' => __DIR__ . '/../..' . '/app/helpers.php',
    );

// auoload_files.php
return array(
    'ed962a97bd972bc82007176b647d4e36' => $vendorDir . '/facade/ignition/src/helpers.php',
    'b4e3f29b106af37a2bb239f73cdf68c7' => $baseDir . '/app/helpers.php',
    );

可以看到这两个文件中都有helpers.php文件,具体用到哪个文件呢,之后我会一篇文章来说明composer加载文件的原理。

总结

一个小小的助手文件,可以引出这么多知识点,如果对这些知识点不了解,只是知道这么做,而没有去了解为什么这么做,学习就像是囫囵吞枣,下次估计会忘了使用composer dumpautoload来生产加载规则文件,还不知道是哪里出了问题。

这么学习下来感觉一个小节可以学习很多知识点,时间消耗的也挺长了,写这篇文章都已经过去半个小时了,感觉也没有说什么,就是把过程捋了一遍。

就这样吧,如果把精力全部用在写文章,而忘记是学习了解框架的,有点本末倒置了,写文章的目的是加深学习,看看自己到底知道多少。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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