PHP Laravel - 类[controllername]控制器不存在

问题描述 投票:3回答:1

我目前正在尝试开发自定义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');
});

Error :

类Oliverbusk \ InvoiceConverter \ Controllers \ InvoiceconverterController不存在

Bonus info:

Composer转储自动加载显示以下内容:

Discovered Package: oliverbusk/invoiceconverter
  • 我已经尝试用php artisan:cache:clear清除缓存。
  • 我也试过composer update
php laravel
1个回答
1
投票

路径中的命名空间与您实际使用的命名空间不匹配。

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,因为它们是两个单独的单词。

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