【问题标题】:How to add helpers in own laravel packages? (Call to undefined function)如何在自己的 laravel 包中添加助手? (调用未定义的函数)
【发布时间】: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

标签: laravel package


【解决方案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 文件进行更改时发生。

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 2017-11-09
      • 2015-06-24
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2013-07-31
      • 2017-01-02
      相关资源
      最近更新 更多