我有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
{...}
我认为是命名空间问题。那么如何调用包控制器呢?
答案 0 :(得分:2)
默认情况下,
RouteServiceProvider
包含您的路径文件 一个namespace
组,允许您注册控制器路由 指定完整的App\Http\Controllers
名称空间前缀。那么你only
需要指定comes after
的命名空间部分 baseApp\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');
这是否是一个好习惯,但它解决了问题。