Mostrando entradas con la etiqueta Rutas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Rutas. Mostrar todas las entradas

Routes: Listar todas las rutas mediante una URL

Route::get('showAllRoutes', function() {

        $routeCollection = Route::getRoutes();

        foreach ($routeCollection as $value) {

            echo $value->uri()."<br>";

            echo $value->methods()[0]."<br>";

            echo $value->getName()."<br>";

            echo $value->getActionName()."<br>";

            echo "<hr>";

        }

        return "hecho";

    }); 

Crear un nuevo archivo de rutas

Todo se hace en routes/web.php pero para que esté todo más limpio y organizado podemos crear el fichero routes\admin.php q contendrá:
use Illuminate\Support\Facades\Route;
use App\Http\Livewire\Admin\ShowProducts;
Route::get("/", ShowProducts::class)->name('admin.index');

Y en app\Providers\RouteServiceProvider.php dentro de boot:
Route::middleware('web', 'auth')
     ->prefix('admin')
     ->namespace($this->namespace)
     ->group(base_path('routes/admin.php'));

Como le hemos puesto prefijo Para acceder a esa ruta será ya:
http://miproyecto/admin

RouteServiceProvider: Creando url amigables dinámicamente

Por ejemplo en routes\peliculas\peliculas.php: $friendlyUrl = ['lo-que-el-viento-se-llevo','rebeca','que-verde-era-mi-valle','la-senora-miniver','casablanca'];

foreach ($friendlyUrl as $clave=>$valor) {
    Route::get($valor, [DeveloperController::class, 'prueba'])->name($valor)->middleware('auth');
}

Y en ese Controller:
function getCurrentRoute() {
    return Request::route()->getName();
}

public function prueba(Request $request) {
    echo "La url de esta página es: ".getCurrentRoute();
    die;
}

Ejemplo:
http://midominio/public/peliculas/casablanca -> La url de esta página es: casablanca
http://midominio/public/peliculas/xxx -> da error

RouteServiceProvider: Creando rutas

En app\Providers\RouteServiceProvider.php en public function map() añadir:
$this->mapPeliculasRoutes();
$this->mapPeliculasAnnoRoutes();

En el mismo En app\Providers\RouteServiceProvider.php crear esas funciones:
protected function mapPeliculasRoutes() {
    Route::prefix('peliculas/')
    ->middleware('web')
    ->namespace($this->namespace)
    ->group(base_path('routes/peliculas/peliculas.php'));
}

protected function mapPeliculasAnnoRoutes() {
    Route::prefix('peliculas/anno/')
    ->middleware('web')
    ->namespace($this->namespace)
    ->group(base_path('routes/peliculas/peliculasAnno.php'));
}

En routes\peliculas\peliculas.php:
Route::get('/', function() {
    return "estás en peliculas";
});

En routes\peliculas\peliculasAnno.php:
Route::get('/', function() {
    return "Estás en peliculas/anno";
});

Route::get('/{anno}', function($anno) {
    return "Estás en peliculas/anno: ".$anno;
});

Ejemplos:
http://midominio/public/peliculas -> da "estás en peliculas"
http://midominio/public/peliculas/anno -> da "estas en Estás en peliculas/anno"
http://midominio/public/peliculas/anno/1992 -> da "estas en Estás en peliculas/anno: 1992"

Rutas agrupar

Por ejemplo:
Route::get('/admin', 'admin\HomeController@index')->name('admin.home');
Route::resource('/admin/files', 'admin\FileController')->names('admin.files');

Se podría agrupar (y además añadir a todas un mismo middleware):
// prefix para la ruta y namespace para los controllers
Route::group(['prefix' => 'admin', 'namespace' => 'admin', 'middleware' => 'auth'], function () {
    Route::get('/', 'HomeController@index')->name('admin.home');
    Route::resource('/files', 'FileController')->names('admin.files');
});

Ruta redirigir a una ruta desde el Controller

En web.php de routes:
Route::get("/aaa", "Uno@metodo_01")->name("met1");
Route::get("/bbb", "Uno@metodo_02")->name("met2");

En el Controller uno: public function metodo_01() {
        // hacer todo lo que haya q hacer en este metodo
        // y cuando haya terminado redirigir al metodo_02
        return redirect()->route('met2');
}

public function metodo_02() {
        return "Estás en metodo_02 del controller Uno";
}

Para probarlo:
http://localhost/LARAVEL/blog/public/aaa

Ejemplos diferentes Routes

Una función directamente en routes/web sin que envíe ni a controlador ni vista:
Route::get('/prueba/{id}/{nombre}', function ($id, $nombre) {
    return "El id es ".$id." y el nombre es ".$nombre;
})->where("nombre", "['a-z','A-Z']+");

// Mandar directamente a una vista sin pasar por un controller
Route::get('/', function () {
   return view('front/index');
});

Route::get('/', 'PortadaController@index');

Auth::routes();

Route::resource('peliculas', 'PeliculasController');

Route::get('buscar/{item}', 'BuscarController@buscar')->name('buscar');

Route::get('/borrar-colaborador/{id}', 'ColaboradorController@borrarColaborador')->name('borrar-colaborador');

Route::resource('criticas', 'CriticasController')->middleware('auth', ['except' => ['frontCriticasList']]);

Route::post('youtube.update-hist-youtube', 'YoutubeController@updateHistyoutube')->name('youtube.update-hist-youtube');

Route::group(['prefix' => 'api'], function() {
    Route::group(['prefix' => 'v1'], function() {
        Route::get('create', 'GarciController@create');
        Route::get('index', 'GarciController@index');
    });
    Route::group(['prefix' => 'v2'], function() {
        Route::get('create', 'YoutubeController@create');
        Route::get('index', 'YoutubeController@index');
    });
});

Route::get('ajaxRequest', 'AjaxController@ajaxRequest');
Route::post('ajaxRequest', 'AjaxController@ajaxRequestPost');


A la hora de llamar a una ruta con parámetros se puede hacer:
<a href="{{ route('historial_list', ['anno' => '1951']) }}">xxx</a>
O directamente:
<a href="{{ route('historial_list', ['1951']) }}">xxx</a>


Pasar variables de javascript a una ruta:
$("#annoBusq").change(function(){
anno = $("#annoBusq option:selected").val();
ruta = "{{ route('historial_list', ['anno' => ":anno"]) }}";
ruta = ruta.replace(':anno', anno);
location.href = ruta;
});

Rutas

Las rutas se generan físicamente en el fichero:
\routes\web.php

Ejemplo rutas: Route::get('usuarios/{id}', UserController@show);
Route::get('usuarios/{id}', UserController@show)->where('id', '[0-9]+');

Para saber todas las rutas creadas en tu proyecto:
php artisan route:list