如何在自己的 Laravel 包中添加助手? (调用未定义的函数)

问题描述 投票:0回答:5

在我的composer.json中我写了:

"autoload": {
    "psr-4": {
      "Pmochine\\MyOwnPackage\\": "src/"
    },
    "files": [
      "src/helpers.php"
    ]
  },

但不知怎的,即使在composer dump-autoload之后,函数也没有加载。我得到“调用未定义的函数”。为了创建包,我使用了包生成器。也许它与在供应商文件夹中创建符号链接有关?

我写的内部助手

<?php

if (! function_exists('myowntest')) {

   function myowntest()
   { 
      return 'test'; 
   }
}
laravel package
5个回答
5
投票

在套餐服务提供商中,尝试添加以下内容:

// if 'src/helpers.php' does not work, try with 'helpers.php'
if (file_exists($file = app_path('src/helpers.php'))) { 
    require $file;
}

3
投票

您正在做的事情是最佳实践并且应该有效。我以 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": "[email protected]"
        }
    ],
    "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 中以正确的方式使用自己的包?


2
投票

唯一对我有用的是运行

composer remove <vendor>/<package>
并再次要求它回来。否则文件部分将被忽略。

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


1
投票

只需要调用你的主项目

 composer update you/your-package

来源


0
投票

我遇到了同样的问题,我正在开发一个位于

packages/provider/package/src
的本地软件包,我添加了

"autoload": {
        "psr-4": {
            ...
        },
        "files": [
                "packages/provider/package/src/Helpers/helpers.php"
            ]
    }

到我的应用程序

composer.json
文件并且它有效。

© www.soinside.com 2019 - 2024. All rights reserved.