代码之家  ›  专栏  ›  技术社区  ›  oliverbj

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

  •  3
  • oliverbj  · 技术社区  · 7 年前

    我目前正在尝试开发一个定制的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"
                ]
            }
        }
    

    然后我在我的项目中自动加载了这个 编写器.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');
    });
    

    错误:

    奖金信息:

    编写器转储自动加载

    Discovered Package: oliverbusk/invoiceconverter
    
    • 我已经试过用 php artisan:cache:clear .
    • 我也试过了 composer update
    1 回复  |  直到 7 年前
        1
  •  1
  •   James Cook    7 年前

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

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

    推荐文章