为什么包路由不加载控制器类?

时间:2016-10-19 11:45:16

标签: laravel laravel-5

我试图在laravel 5.2.*中添加包,但是包路由返回错误Class FormController does not exist

我正在尝试

Package Directory > packages\js\form\src

套餐>提供商

namespace Js\Form;
use Illuminate\Support\ServiceProvider;
class FormServiceProvider extends ServiceProvider
{
    public function boot()
    {
    }

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

套餐>控制器

namespace Js\Form;  
use App\Http\Controllers\Controller;
use Carbon\Carbon;
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中

Js\Form\FormServiceProvider::class,

我也执行了此命令composer dump-autoload然后尝试打开此网址http://localhost/project/public/index.php/contactus,但显示以下错误。

Class FormController does not exist

任何人都可以指导我在哪里可以修复它的问题。如果有人指导我,我想表示感谢。谢谢

1 个答案:

答案 0 :(得分:2)

错误来自这一行:

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

默认情况下,路由器会查找相对于App\Http\Controllers的控制器,但这不是FormController所在的位置。

要解决此问题,您需要指定FormController 相对App\Http\Controllers的位置,或者提供绝对路径。< / p>

例如,如果您的FormController已命名为App\FormController,则可以写:

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

所以,在你的情况下,它将是:

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