我目前正在尝试开发自定义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"
}
},
这是我的serviceprovider文件:
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转储自动加载显示以下内容:
Discovered Package: oliverbusk/invoiceconverter
php artisan:cache:clear
清除缓存。composer update
路径中的命名空间与您实际使用的命名空间不匹配。
Route::group(['namespace' => 'Oliverbusk\InvoiceConverter\Controllers'], function () {
Route::get('invoiceconverter', 'InvoiceconverterController@index');
});
改成
Route::group(['namespace' => 'Oliverbusk\Invoiceconverter\Controllers'], function ()
{
Route::get('invoiceconverter', 'InvoiceconverterController@index');
});
看看是否有帮助。
我还建议你将所有代码重构为大写的InvoiceConverter,因为它们是两个单独的单词。