PHP Laravel - Класс [controllername] Контроллер не существует - PullRequest
0 голосов
/ 30 августа 2018

В настоящее время я пытаюсь разработать собственный пакет 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"
            ]
        }
    }

Затем я автоматически загрузил это в мои проекты main composer.json file:

"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

1 Ответ

0 голосов
/ 30 августа 2018

Пространство имен в вашем маршруте не соответствует пространству имен, которое вы фактически использовали.

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, поскольку это два отдельных слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...