plantillas - usar blade sin laravel
Laravel Controller Enrutamiento de la subcarpeta (11)
Soy nuevo en Laravel. Para intentar mantener mi aplicación organizada, me gustaría poner mis controladores en subcarpetas de la carpeta del controlador.
controllers/
---- folder1
---- folder2
Traté de enrutar a un controlador, pero laravel no lo encuentra.
Route::get(''/product/dashboard'', ''folder1.MakeDashboardController@showDashboard'');
¿Qué estoy haciendo mal?
1.crea tu subcarpeta de la siguiente manera:
app
----controllers
--------admin
--------home
2. configure su código en la aplicación / routes.php
<?php
// index
Route::get(''/'', ''Home/HomeController@index'');
// admin/test
Route::group(
array(''prefix'' => ''admin''),
function() {
Route::get(''test'', ''Admin/IndexController@index'');
}
);
?>
3. escribir algo en la aplicación / controladores / admin / IndexController.php, por ejemplo:
<?php
namespace Admin;
class IndexController extends /BaseController {
public function index()
{
return "admin.home";
}
}
?>
4. Acceda a su sitio, por ejemplo: localhost / admin / test, verá "admin.home" en la página.
pd: por favor ignora mi pobre inglés
Acabo de encontrar la manera de hacerlo:
Simplemente agregue las rutas a /app/start/global.php
ClassLoader::addDirectories(array(
app_path().''/commands'',
app_path().''/controllers'',
app_path().''/controllers/product'',
app_path().''/models'',
app_path().''/database/seeds'',
));
Agregue sus controladores en sus carpetas:
controllers/
---- folder1
---- folder2
Crea tu ruta sin especificar la carpeta:
Route::get(''/product/dashboard'', ''MakeDashboardController@showDashboard'');
correr
composer dump-autoload
E intenta de nuevo
Creo que para mantener los controladores de Admin y Front en carpetas separadas, el espacio de nombres funcionará bien.
Consulte la estructura de directorios de Laravel a continuación, que funciona bien para mí.
app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php
Las rutas en el archivo "routes / web.php" serían las siguientes
/* All the Front-end controllers routes will work under Front namespace */
Route::group([''namespace'' => ''Front''], function () {
Route::get(''/home'', ''HomeController@index'');
});
Y para la sección de administración, se verá como
/* All the admin routes will go under Admin namespace */
/* All the admin routes will required authentication,
so an middleware auth also applied in admin namespace */
Route::group([''namespace'' => ''Admin''], function () {
Route::group([''middleware'' => [''auth'']], function() {
Route::get(''/'', [''as'' => ''home'', ''uses'' => ''DashboardController@index'']);
});
});
¡¡Espero que esto ayude!!
En Laravel 5.6, suponiendo que el nombre de su subcarpeta es Api
:
En su controlador, necesita estas dos líneas:
namespace App/Http/Controllers/Api;
use App/Http/Controllers/Controller;
Y en su archivo de ruta api.php
, necesita:
Route::resource(''/myapi'', ''Api/MyController'');
Estoy usando Laravel 4.2. Aquí cómo lo hago:
Tengo una estructura de directorios como esta:
aplicación
--controladores
----administración
------ AdminController.php
Después de haber creado el controlador, coloqué en el composer.json la ruta al nuevo directorio de administración:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
Siguiente he corrido
composer dump-autoload
y entonces
php artisan dump-autoload
Luego en el routes.php tengo el controlador incluido así:
Route::controller(''admin'', ''AdminController'');
Y todo funciona bien
Para ** Laravel 5 o Laravel 5.1 LTS ambos **, si tiene varios Controladores en la carpeta Admin, Route::group
será realmente útil para usted. Por ejemplo:
Mi carpeta Estructura:
Http
----Controllers
----Api
----V1
PostsApiController.php
CommentsApiController.php
PostsController.php
PostAPIController:
<?php namespace App/Http/Controllers/Api/V1;
use App/Http/Requests;
use App/Http/Controllers/Controller;
use Illuminate/Http/Request;
class PostApiController extends Controller {
...
En My Route.php, configuré un grupo de namespace
para Api/V1
y, en general, se ve así:
Route::group(
[
''namespace'' => ''Api/V1'',
''prefix'' => ''v1'',
], function(){
Route::get(''posts'', [''uses''=>''PostsApiController@index'']);
Route::get(''posts/{id}'', [''uses''=>''PostssAPIController@show'']);
});
Para mover detalles para crear una subcarpeta, visite el siguiente enlace: https://laracasts.com/discuss/channels/general-discussion/reflectionexception-class-apphttpcontrollersadminadmincontroller-does-not-exist
Para aquellos que usan Laravel 5, necesitan establecer el espacio de nombres para el controlador dentro del subdirectorio (Laravel 5 aún está en desarrollo y los cambios están ocurriendo diariamente)
Para obtener una estructura de carpetas como:
Http
----Controllers
----Admin
PostsController.php
PostsController.php
espacio de nombres Admin / PostsController.php archivo así:
<?php namespace App/Http/Controller/Admin;
use App/Http/Controllers/Controller;
class PostsController extends Controller {
//business logic here
}
Entonces tu ruta para esto es:
$router->get(''/'', ''Admin/PostsController@index'');
Y, por último, no hagas ni un compositor ni un botín artesanal
composer dump-autoload
o
php artisan dump
Si está utilizando Laravel 5.3 o superior, no hay necesidad de entrar en tanta complejidad como han dicho otras respuestas. Simplemente use el comando artesanal predeterminado para generar un nuevo controlador. Por ejemplo, si quiero crear un controlador de User
en User
carpeta de User
. Yo escribiría
php artisan make:controller User/User
En rutas,
Route::get(''/dashboard'', ''User/User@dashboard'');
simplemente hacer esto estaría bien y ahora en localhost / dashboard es donde reside la página.
Espero que esto ayude.
para Laravel 5.3 anterior
php artisan make:controller test/TestController
Esto creará la carpeta de prueba si no existe, luego crea TestController
dentro.
TestController
se verá así:
<?php
namespace App/Http/Controllers/test;
use Illuminate/Http/Request;
use App/Http/Controllers/Controller;
class TestController extends Controller
{
public function getTest()
{
return "Yes";
}
}
?>
En rutas,
Route::get(''/test'',''test/TestController@getTest'');
php artisan make:controller admin/CategoryController
Aquí el administrador es el subdirectorio en la aplicación / Http / Controladores y CategoryController es el controlador que desea crear dentro del directorio