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

问题描述 投票:2回答:3

我有一个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
{...}

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

php laravel
3个回答
2
投票

默认情况下,RouteServiceProvider包含namespace组中的路由文件,允许您注册控制器路由,而无需指定完整的App\Http\Controllers名称空间前缀。所以,你only需要指定comes after基础App\Http\Controllers命名空间的命名空间部分。

你需要删除namespace

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

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

});

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',
    ]);
});

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');

是否良好的做法,但它解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.