我目前正在尝试开发一个自定义的Laravel包,但是在开始时遇到了一些问题。
这是我的文件结构:
-packages
- oliverbusk
-invoiceconverter
-src
-controllers
- InvoiceconverterController.php
-resources
- views
- home.blade.php
-routes
- web.php
- InvoiceConverterServiceProvider.php
正如您所看到的,我的文件位于src/
文件夹中。
首先,这是我的composer.json
,在我的包文件夹内:
"extra": {
"laravel": {
"providers": [
"Oliverbusk\\Invoiceconverter\\InvoiceConverterServiceProvider"
]
}
}
我已经在我的项目的 主要 composer.json
文件中自动加载了它:
"require": {
//....
"oliverbusk/invoiceconverter": "dev-feature-package"
},
"autoload": {
[...]
"psr-4": {
"App\\": "app/",
"Oliverbusk\\Invoiceconverter\\": "packages/oliverbusk/invoiceconverter"
}
},
这是我的服务提供者文件:
namespace Oliverbusk\Invoiceconverter;
use Illuminate\Support\ServiceProvider;
class InvoiceConverterServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//Load our routes
$this->loadRoutesFrom(__DIR__ . '/routes/web.php');
//Load our views
$this->loadViewsFrom(__DIR__ . '/resources/views', 'invoiceconverter');
}
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
}
我的控制器文件位于controllers/
目录下:
namespace Oliverbusk\Invoiceconverter\Controllers;
use App\Http\Controllers\Controller;
class InvoiceconverterController extends Controller
{
public function index()
{
return view('invoiceconverter::home');
}
}
最后,我的
routes/web.php
文件:Route::group(['namespace' => 'Oliverbusk\InvoiceConverter\Controllers'], function () {
Route::get('invoiceconverter', 'InvoiceconverterController@index');
});
错误:
Oliverbusk\InvoiceConverter\Controllers\InvoiceconverterController类不存在
额外信息:
Composer dump autoload 显示如下:
Discovered Package: oliverbusk/invoiceconverter
- 我已经尝试使用
php artisan:cache:clear
清除缓存。 - 我也尝试了
composer update
controllers
目录首字母大写以匹配命名空间,所以它应该是Controllers
。虽然可能只是这样而已。类名和文件名也应保持相同的大小写形式。 - JonathonInvoiceconverterController.php
被更新。 - oliverbj