如何在自己的 laravel 包中添加助手? (调用未定义的函数)
Posted
技术标签:
【中文标题】如何在自己的 laravel 包中添加助手? (调用未定义的函数)【英文标题】:How to add helpers in own laravel packages? (Call to undefined function) 【发布时间】:2018-12-21 16:48:48 【问题描述】:在我的 composer.json 我写过:
"autoload":
"psr-4":
"Pmochine\\MyOwnPackage\\": "src/"
,
"files": [
"src/helpers.php"
]
,
但不知何故,即使在 composer dump-autoload 之后,函数也没有加载。我得到“调用未定义的函数”。为了创建这个包,我使用了package generator。也许它与在供应商文件夹中创建一个符号链接有关?
我写的内部助手
<?php
if (! function_exists('myowntest'))
function myowntest()
return 'test';
【问题讨论】:
helpers.php 路径? @J.Doe 它是 src/helpers.php。我的设置与github.com/keevitaja/linguist 相同 @PhilippMochine 你明白了吗?我的应用无法检测到 composer.json 中的帮助程序自动加载。即使我跑composer dump-autoload
【参考方案1】:
在包服务提供者中,尝试添加这个:
// if 'src/helpers.php' does not work, try with 'helpers.php'
if (file_exists($file = app_path('src/helpers.php')))
require $file;
【讨论】:
它的工作方式类似于:if (file_exists($file = DIR.'/helpers.php'))。但是,我仍然很好奇为什么它没有检测到自己,因为它为其他人工作...... 这不是正确的做法。请改用 composer.json。【参考方案2】:您正在做的是最佳实践,应该有效。我以 barryvdh/laravel-debugbar 中的 composer.json 为例。 https://github.com/barryvdh/laravel-debugbar/blob/master/composer.json
"name": "barryvdh/laravel-debugbar",
"description": "PHP Debugbar integration for Laravel",
"keywords": ["laravel", "debugbar", "profiler", "debug", "webprofiler"],
"license": "MIT",
"authors": [
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
],
"require":
"php": ">=5.5.9",
"illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*",
"symfony/finder": "~2.7|~3.0",
"maximebf/debugbar": "~1.13.0"
,
"autoload":
"psr-4":
"Barryvdh\\Debugbar\\": "src/"
,
"files": [
"src/helpers.php"
]
我的猜测是您不需要在主 composer.json 中以正确的方式使用自己的包?
【讨论】:
如果您有时间尝试使用我提供的链接生成一个包。我很好奇你是否可以添加助手。但除了助手之外,一切正常。我可以正确地调用我的外观,它给了我输出。【参考方案3】:只需要调用你的主项目
composer update you/your-package
Source
【讨论】:
【参考方案4】:唯一对我有用的是运行composer remove <vendor>/<package>
并再次要求它。否则文件部分将被忽略。
这似乎发生在本地开发包并对 composer.json 文件进行更改时发生。
【讨论】:
以上是关于如何在自己的 laravel 包中添加助手? (调用未定义的函数)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 laravel 6 在我的包中使用 auth 进行自定义防护?