Laravel包控制器在路线中找不到

时间:2018-01-24 06:20:55

标签: php laravel

我有simple package,我想使用控制器。当我尝试在我得到的路线中使用它时

Class App\Http\Controllers\Tropicalista\Admin\Controllers\DashboardController 
does not exist

我在/routes/web.php

中有这个
Route::group([
    'namespace' => '\Tropicalista\Admin\Controllers', 
    'prefix'=> 'admin'], function() {

        Route::get('/', ['as' => 'admin.root', 'uses' => 'DashboardController@index']);

});

我的控制器:

namespace Tropicalista\Admin\Controllers;

use Illuminate\Http\Request;
use Analytics;
use Carbon\Carbon;
use Spatie\Analytics\Period;
use Illuminate\Support\Collection;
use Illuminate\Routing\Controller;

class DashboardController extends Controller
{...}

我认为是命名空间问题。那么如何调用包控制器呢?

3 个答案:

答案 0 :(得分:2)

  

默认情况下,RouteServiceProvider包含您的路径文件   一个namespace组,允许您注册控制器路由   指定完整的App\Http\Controllers名称空间前缀。那么你   only需要指定comes after的命名空间部分   base App\Http\Controllers namespace。

您需要删除namespace

Route::group(['prefix'=> 'admin'], function() {

    Route::get('/', ['as' => 'admin.root', 'uses' => '\Tropicalista\Admin\Controllers\DashboardController@index']);

});

答案 1 :(得分:1)

由于它是一个软件包,因此您需要在软件包中register the routes

您可以看到注册包控制器here的示例:

$routeConfig = [
    'namespace' => 'Barryvdh\Debugbar\Controllers',
    'prefix' => $this->app['config']->get('debugbar.route_prefix'),
    'domain' => $this->app['config']->get('debugbar.route_domain'),
    'middleware' => [DebugbarEnabled::class],
];
$this->getRouter()->group($routeConfig, function($router) {
    $router->get('open', [
        'uses' => 'OpenHandlerController@handle',
        'as' => 'debugbar.openhandler',
    ]);
});

答案 2 :(得分:1)

为了调用程序包控制器,请从

更改RouteServiceProvider的名称空间组。
protected $namespace = 'App\Http\Controllers';

为空/空

protected $namespace = '';

然后,路线可以写为

Route::get('homepage', 'Package\Namespace\Controllers\ControllerName@ActionName');

此外,如果要为默认控制器编写路由,请在开始url之前使用斜杠“ /”。

Route::get('/homepage', 'App\Http\Controllers\ControllerName@ActionName');

这是否是一个好习惯,但它解决了问题。