Tengo un paquete simple y quiero usar el controlador. Cuando trato de usarlo en rutas obtuve

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

Tengo esto en mi /routes/web.php

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

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

});

Mi controlador:

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
{...}

Creo que es un problema de espacio de nombres. Entonces, ¿cómo puedo llamar al controlador del paquete?

2
Tropicalista 24 ene. 2018 a las 09:20

3 respuestas

La mejor respuesta

De forma predeterminada, RouteServiceProvider incluye sus archivos de ruta dentro de un grupo namespace, que le permite registrar rutas de controlador sin especificando el prefijo de espacio de nombres completo App\Http\Controllers. Vos tambien only necesita especificar la porción del espacio de nombres que comes after espacio de nombres base App\Http\Controllers.

Debe eliminar espacio de nombres

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

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

});
3
Sohel0415 24 ene. 2018 a las 06:33

Para llamar al controlador del paquete, cambie el grupo de espacio de nombres de RouteServiceProvider de

protected $namespace = 'App\Http\Controllers';

A nulo / vacío, es decir

protected $namespace = '';

Entonces, la ruta se puede escribir como,

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

Además, si desea escribir la ruta para el controlador predeterminado, use la barra diagonal '/' antes de comenzar la url.

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

Si es una buena práctica o no, pero resolvió el problema.

1
Kisz Na 22 mar. 2019 a las 04:53

Como se trata de un paquete, debe registrar las rutas en el paquete.

Puede ver un ejemplo de registro de controladores de paquetes aquí:

$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
Alexey Mezenin 24 ene. 2018 a las 06:40