所以我正在编写一个Laravel软件包,该软件包最终将存在于git(或任何地方)上。
我已经在/ app /中创建了此处概述的包结构(https://rathes.de/blog/en/laravel-package,顺便说一句资源),并且还创建了Facade.php,PackageServiceProvoder.php和转储的控制器“ Hello world”到浏览器。
我也有一个预先存在的HomeController.php,并在测试函数中添加了以下内容:
dd(\MyPackage::test());// <-- Should dump "Hello world" and die.
我还已将以下内容添加到软件包的composer.json文件中并运行composer install:
"autoload": {
"psr-4": {
"Company\\LaravelPackageMyPackage\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Company\\LaravelPackageMyPackage\\Test\\": "tests"
}
},
"extra": {
"laravel": {
"providers": [
"Company\\LaravelPackageMyPackage\\Lar...kageServiceProvider"
],
"aliases": {
"MyPackage": "Company\\LaravelPackageMyPackage\\Facade"
}
}
},
我的问题是,当我在浏览器中运行它时,出现以下错误:
Class 'MyPackage' not found // <-- references the dd() line of code above
我一定错过了本教程中的某个步骤或类似的步骤,因为据我所知它应该现在可以正常工作。 有什么建议吗?
Laravel 5.5,PHP 7.1,Ubuntu Linux操作系统。
只需在下面的代码:
File structure (very similar to this):
Project -> app -> my-package /
├── database/
│ ├── .gitkeep
├── config/
│ ├── package-name.php
├── src/
│ ├── PackageNameServiceProvider.php
├── tests/
│ ├── TestCase.php
├── .gitignore
├── CHANGELOG.md
├── composer.json
├── LICENSE
├── phpunit.xml
├── README.md
// FACADE:
<?php
namespace Company\LaravelPackageMyPackage;
class Facade extends \Illuminate\Support\Facades\Facade
{
/**
* {@inheritDoc}
*/
protected static function getFacadeAccessor()
{
return 'laravelpackagemypackage';
}
}
// MY PACKAGE
<?php
namespace Company\LaravelPackageMyPackage;
class LaravelPackageMyPackage
{
public function test()
{
return "Hello From My Package!";
}
}
// SERVICE PROVIDER:
<?php
namespace Company\LaravelPackageMyPackage;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;
class LaravelPackageMyPackageServiceProvider extends ServiceProvider
{
protected $defer = false;
public function boot()
{
//$this->loadMigrationsFrom(__DIR__ . '/../database/migrations/');
}
public function register()
{
App::bind('laravelpackagemypackage', function () {
return new LaravelPackageMyPackage();
});
}
}
答案 0 :(得分:1)
我有类似的问题。
确保您的类名称空间与composer.json相同 在您的ServiceProvider和Facade中,命名空间应为
else
还要检查您的Facade是否返回正确的字符串
namespace Company\LaravelPackageMyPackage
在您的ServiceProvider注册方法中
protected static function getFacadeAccessor()
{
return 'mypackage';
}
编辑
您已经编写了laravelpackageMyPackage,但是在getFacadeAccessor()中应该是laravelpackagemypackage
编辑 调用MyPackage :: test()时,尝试添加
App::bind('mypackage', function () {
return new MyPackage();
});
在您的控制器中,如果这不起作用
尝试直接调用外观
Company \ LaravelPackageMyPackage \ Facade :: test()