Почему package routes не загружает класс контроллера?

#laravel #laravel-5

#laravel #laravel-5

Вопрос:

Я пытаюсь добавить пакет в laravel 5.2.* , но package routes возвращает ошибку Class FormController does not exist .

Что я пытаюсь

Package Directory > packagesjsformsrc

Пакет > Поставщик

 namespace JsForm;
use IlluminateSupportServiceProvider;
class FormServiceProvider extends ServiceProvider
{
    public function boot()
    {
    }

    public function register()
    {
        include __DIR__.'/routes.php';
        $this->app->make('JsFormFormController');
    }
}
  

Пакет> Контроллер

 namespace JsForm;  
use AppHttpControllersController;
use CarbonCarbon;
class FormController extends Controller
{
    public function index()
    {
        echo 'test';
    }
}
  

Пакет > Композитор

 {
    "name": "js/form",
    "description": "this is form",
    "type": "project",
    "license": "xyz",
    "minimum-stability": "dev",
    "require": {}
}
  

Главный композитор

 "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\": "app/",
            "Js\Form\": "packages/Js/Form/src"
        }
    }
  

Пакет > Маршруты

Route::get('/contactus', 'FormController@index');

В config/app.php

JsFormFormServiceProvider::class,

Я также выполнил эту команду, composer dump-autoload затем попытался открыть этот URL http://localhost/project/public/index.php/contactus , но он показывает следующую ошибку.

Class FormController does not exist

Кто-нибудь может подсказать мне, в чем проблема, которую я могу исправить. Я хотел бы быть признателен, если кто-нибудь поможет мне. Спасибо

Комментарии:

1. Я предполагаю, что ошибка возникает из функции маршрутизатора. Вы просто указываете FormController, чтобы он выглядел в местоположении по умолчанию для этого (app / http / controllers), но это не то место, где находится контроллер формы

2. @tam Я согласился с вами, проблема возникает из route, потому что я проверяю это, добавляя неправильное имя контроллера. Итак, как я могу исправить. У вас есть какие-либо идеи?

3. Можете ли вы попробовать эту команду php artisan config:clear в CLI. Иногда случается, что конфигурация берется из кэша.

4. @RonakDattani Я сделал, как вы указали, но при обновлении все еще отображается та же ошибка.

Ответ №1:

Ошибка возникает из этой строки:

 Route::get('/contactus', 'FormController@index');
  

Маршрутизатор по умолчанию ищет контроллеры относительно AppHttpControllers , но это не то, где находится ваш FormController .

Чтобы исправить это, вам нужно будет указать, где FormController был относительно AppHttpControllers , или указав абсолютный путь.

Например, если ваше FormController пространство имен было равно AppFormController , вы могли бы написать:

 Route::get('/contactus', 'AppFormController@index');
  

Итак, в вашем случае это было бы:

 Route::get('/contactus', 'JsFormFormController@index');
  

Комментарии:

1. Вау, удивительно, я следил за ответом и его работой. Большое вам спасибо 1