enrutamiento básico de laravel

El enrutamiento de laravel está definido en el archivo /routes/web.php

1. Archivo de enrutamiento personalizado

1. Cree un nuevo archivo de enrutamiento en el directorio de rutas e importe Illuminate\Support\Facades\Route;

2. Registre el archivo de enrutamiento, escriba el método en app\Providers\RouteServiceProvider.php y llámelo

Registro de ruta


protected function mapLyRoutes()
{
    Route::middleware('web')
        ->namespace($this->namespace)
        ->group(base_path('routes/ly.php'));//路由文件地址
}

 Llamar al método del mapa

     /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapApiRoutes();
        $this->mapWebRoutes();
        $this->mapLyRoutes();

   
    }

2. Utilice enrutamiento

[Nota sobre la protección CSRF]:
Dado que el enrutamiento proporciona protección CSRF, es necesario comentar la parte CSRF del middleware para implementar las funciones anteriores:
Protección CSRF: cualquier formulario HTML que apunte a la ruta POST, PUT o DELETE definida en el archivo de enrutamiento web. Debe
incluirse un campo de token CSRF; de lo contrario, la solicitud será rechazada.
O escriba una lista blanca para la ruta [escriba el nombre de la ruta en el archivo app\Http\Middleware\VerifyCsrfToken.php]

1. Agregar identificador de ruta

\Http\Middleware\VerifyCsrfToken.php;
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::post('ceshi', function () {
    return '我是post方法';
});

 

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
        'ceshi',
    ];
}

2. Comente la parte CSRF del middleware.

\aplicación\Http\Kernel.php

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
//            \App\Http\Middleware\VerifyCsrfToken::class,//注释掉这个CSRF 部分
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

El enrutador le permite registrar rutas que responderán a cualquier solicitud HTTP:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

# Cierre de identificación de ruta del método de enrutamiento
Route::get('foo', function () {   return 'Hello World'; }); # También puedes enrutar al controlador: ruta al saludo de la aplicación\Http\Controllers\HelloController método del controlador Ruta::get('foo', 'HelloController@hello'); A veces es posible que necesite registrar una ruta que pueda responder a múltiples solicitudes HTTP. En este caso, puede usar el método de coincidencia o puede usar el cualquier método para registrar uno. Implementar una ruta que responda a todas las solicitudes HTTP.






 

# 能匹配到数组中的任意一种方式
Route::match(['get', 'post'], '/', function () {
  //
});
# 能匹配到任意一种方式
Route::any('/', function () {
  //
});

3. Parámetros de enrutamiento

3.1 Parámetros requeridos
A veces es necesario capturar algunos fragmentos de URL en el enrutamiento. Por ejemplo, para capturar la identificación de un usuario desde una URL, puede hacerlo
definiendo parámetros de ruta

Route::get('user/{id}', function ($id) {
  return 'User '.$id;
});

Se puede acceder al método anterior a través de http://lbl.com/user/1. 1 representa el valor de id. Si no se pasa el parámetro al acceder, se
producirá un error. Este parámetro debe pasarse.

También puede definir varios parámetros en la ruta según sea necesario [Nota: el primer parámetro pasado corresponde al primer parámetro en la lista de parámetros y no tiene
nada que ver con el nombre]:

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
  //
});

3.2 Parámetros opcionales

A veces, es posible que necesite especificar un parámetro de ruta, pero desea que este parámetro sea opcional. ¿Puedes agregarlo después del parámetro? Para lograr esto
, la premisa es asegurar que las variables correspondientes de la ruta tengan valores predeterminados.

Route::get('user/{name?}', function ($name = null) {
  return $name;
});

Se accede al contenido anterior a través dehttp://lbl.com/user yhttp://lbl.com/user/hello.El parámetro de nombre se puede pasar opcionalmente
.

3.3 Regularidad de enrutamiento
3.3.1 Restricciones de expresión regular

Puede restringir el formato de los parámetros de ruta utilizando el método donde en una instancia de ruta. El método donde acepta un nombre de parámetro y una
expresión regular que define cómo se debe restringir el parámetro.

// 使用正则表达式限定 name 参数必须是字母的
Route::get('user/{name}', function ($name) {
  //
})->where('name', '[A-Za-z]+');

Route::get('user/{name}/{age}', function ($name) {
  //
})->where(['name'=>'[A-Za-z]+','age'=>'[1-10]+']);

Se puede acceder al contenido anterior a través de http://lbl.com/user/hello, pero no a través de http://lbl.com/user/123. 

3.3.2 Restricciones globales
Si desea que un parámetro de enrutamiento específico siga las mismas restricciones de expresión regular, use el método de patrón para
definir estos patrones en el método de inicio de \app\Providers\RouteServiceProvider.php:

public function boot()
{
  Route::pattern('name','[a-z]+');
  parent::boot();
}

Una vez definidas, estas reglas se aplicarán automáticamente a todas las rutas que utilicen este nombre de parámetro.

3.4

Denominación de rutas: puede generar fácilmente URL o redireccionamientos para rutas específicas.
Se puede especificar un nombre de ruta encadenando el método de nombre en la definición de ruta.

Route::get('getu', function () {
  return \route('user');// 生成命名路由的URL
  // return redirect()->route('user'); // 也可以快速重定向到 user
});
Route::get('user', function () {
  return '路由标识';
})->name('user');

3.5.Grupo de enrutamiento

Los grupos de rutas le permiten compartir atributos de ruta, como middleware o espacios de nombres, entre una gran cantidad de rutas sin tener que definir estos
atributos individualmente para cada ruta. Las propiedades compartidas deben pasarse como una matriz en el primer parámetro del método Route::group. La siguiente es una descripción detallada de los atributos compartidos comúnmente utilizados
:

2.5.1 Programa intermedio

Crear middleware

Comando: php artisan make:middleware nombre del middleware

Una vez creado el middleware, se colocará en el directorio app\Http\Middleware de forma predeterminada. Además, el middleware creado debe
registrarse en el archivo app\Http\Kernel.php antes de poder utilizarse.

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'test' => \App\Http\Middleware\Test::class,//注册中间件
    ];

Después del registro, puede utilizar el contenido del middleware en el enrutamiento.

namespace App\Http\Middleware;

use Closure;

class Test
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $request->name ='张三';
        return $next($request);
    }
}
Route::middleware(['test'])->group(function (){
    Route::get('ceshi',function (\Illuminate\Http\Request $request){
        return $request->name;
    });
});

Todas las rutas que utilicen este middleware ejecutarán primero el contenido del middleware.

3.5.2 Espacios de nombres
Otro caso de uso común es utilizar el método del espacio de nombres para asignar el mismo espacio de nombres PHP a todos los controladores en un grupo de enrutamiento.

Route::namespace('Admin')->group(function (){
   Route::get('useri',function(){
     return 'Admin1';
   });
    Route::get('userh',function(){
        return 'Admin2';
    });
});

Se puede acceder a los métodos index y hello a través de http://lbl.com/useri y http://lbl.com/userh respectivamente.

3.5.3 Prefijo de enrutamiento
Puede utilizar el método de prefijo para agregar un prefijo a la URL proporcionada en el grupo de enrutamiento. Por ejemplo, puede
anteponer admin a los URI de todas las rutas del grupo.

Route::prefix('admin')->group(function () {
  Route::get('users', function () {
    //
 });
});

Al acceder, todas las rutas bajo este grupo de enrutamiento deben tener el prefijo admin http://lbl.com/admin/users.

El método de nombre se puede utilizar para agregar una cadena determinada a cada nombre de ruta en el grupo de rutas. Tenga en cuenta que aquí el nombre de la ruta tiene el prefijo
en lugar del ID de la ruta. Por ejemplo, desea anteponer a todos los nombres de ruta el prefijo admin

Route::name('admin.')->group(function (){
    Route::get('users',function (){
        return 'users';
    })->name('users');
    Route::get('goods',function (){
        return 'goods';
    })->name('goods');;
});
Route::get('ceshi',function (){
    return redirect()->route('admin.users'); // 也可以快速重定向到 users
});

3.5.4 Grupo de enrutamiento

El contenido anterior se puede pasar al primer parámetro del método Route::group en forma de matriz, o se puede combinar y
utilizar de forma anidada.

Route::group(['namespace'=>'admin','prefix'=>'pre'],function(){
  Route::middleware('first')->group(function(){
    Route::get('users','AdminController@index');
 });
});

3.6 Enrutamiento alternativo
Usando el método Route::fallback, puede definir una ruta que se ejecute solo cuando ninguna otra ruta coincida con la solicitud entrante.

Route::fallback(function (){
    return '未找到此地址';
});

 

Supongo que te gusta

Origin blog.csdn.net/qq_37865672/article/details/107312908
Recomendado
Clasificación