如何在自己的 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 &lt;vendor&gt;/&lt;package&gt; 并再次要求它。否则文件部分将被忽略。

这似乎发生在本地开发包并对 composer.json 文件进行更改时发生。

【讨论】:

以上是关于如何在自己的 laravel 包中添加助手? (调用未定义的函数)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 6 在我的包中使用 auth 进行自定义防护?

Laravel - 如何调用模型类助手然后在视图中显示结果

laravel5.*添加ide_helper.php 助手

Laravel 5.1 如何在刀片文件上使用 old('') 助手进行无线电输入

未找到 Laravel 助手类

覆盖 laravel 5 辅助函数