【问题标题】:PHP Laravel - Class [controllername] Controller does not existPHP Laravel - 类 [控制器名称] 控制器不存在
【发布时间】:2019-02-05 08:17:56
【问题描述】:

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

然后我在我的项目中自动加载了这个 ma​​in 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 转储自动加载显示如下:

Discovered Package: oliverbusk/invoiceconverter
  • 我已经尝试使用php artisan:cache:clear 清除缓存。
  • 我也试过composer update

【问题讨论】:

  • 尝试发布代码php artisan vendor:publish
  • 我不确定它是否会有所不同,但您应该确保您的controllers 目录大写以匹配命名空间,因此它应该是Controllers。不过也可能是这样。你的类名和它所在的文件也是如此,尽量保持相同的大小写。
  • @urfusion - 这个包还没有发布任何东西。
  • @Jonathon - 刚刚尝试将文件夹名称更改为 Controllers - 无效。
  • 您尝试更改类名以匹配文件名,还是更改文件名以匹配类名?

标签: php laravel


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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 2015-05-23
    • 2017-09-20
    • 2015-04-20
    • 2019-03-26
    • 2014-11-11
    • 2015-04-21
    • 2014-05-29
    • 2017-06-15
    相关资源
    最近更新 更多