如何在Laravel中的文件夹App \ Http \ Controllers外使用控制器?

时间:2019-08-26 15:36:32

标签: php laravel

我在文件夹App \ Web \ Controllers \ WebController中有一个控制器WebController。

  

WebController

<?php namespace App\Web\Controllers;

use Illuminate\Http\Request;

class WebController extends Controller
{
    public index(){
        return view('layouts.master');
    }
}

  

路线

Route::get('home_page','WebController@index');

当我呼叫这条路线时,出现以下错误:

  

App \ Http \ Controllers \ WebController类不存在

4 个答案:

答案 0 :(得分:0)

这与路由系统有关。

App\Providers\RouteServiceProvider.php中,您将找到map()方法:

/**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapWebRoutes();
        $this->mapApiRoutes();
    }

在该类下,您将找到“ Web Routes”命名空间的定义

/**
 * Define the "web" routes for the application.
 *
 * These routes all receive session state, CSRF protection, etc.
 *
 * @return void
 */
protected function mapWebRoutes()
{
    Route::middleware('web')
         ->namespace($this->namespace) // 'App\Http\Controllers'
         ->group(base_path('routes/web.php'));
}

现在,您只需要根据自己的喜好更改namespace()属性

protected function mapWebRoutes()
{
    Route::middleware('web')
         ->namespace('App\Web\Controllers')
         ->group(base_path('routes/web.php'));
}

答案 1 :(得分:0)

class WebController extends **Controller**

这种关系有问题。您必须将控制器导入此文件。您不见了

use App\Http\Controllers\Controller

另外,您的路线错误。试试这个

Route::namespace('your namespace here')->group(function () { 
   Route::get('/', 'your-controller-here@your-method'); 
 });
  

请勿更改routeserviceprovider的配置

答案 2 :(得分:0)

您可以在RouteServiceProvider中更改默认名称空间。
protected $namespace = 'App\Http\Controllers';
App\Http\Controllers是默认名称空间,您可以将其更改为
protected $namespace = 'App\Web\Controllers';
然后您的代码应该可以运行

答案 3 :(得分:0)

我建议使用命名空间从Devetoka上面的代码,或者对于仅一个或两个控制器(在我的情况下),您可以简单地注入完整的命名空间。这已经过测试并且可以工作。

(2, 3)