zoukankan      html  css  js  c++  java
  • laravel路由

    路由

    在laravel中,定义路由的地方在routes/web.php文件中。在使用laravel前必须先定义路由,然后才能在浏览器中访问。routes文件夹中还有一个api.php,用于定义api路径。

    最简单的路由:

    Route::get('/',function(){
       return 'hello,world!' ;
    });
    

    此时在浏览器中,输入localhost,就可以看到输出的字符串。

    使用MVC模式时,我们一般先定义路由,然后在路由中访问控制器中的方法,控制器中的方法返回响应的视图,此时我们可以定义路由,如下:

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

    其中IndexController是控制器类,index是控制器类中的方法,index方法中可以定义返回的视图。

    路由动作

    上面Route::get语法只能处理get请求,laravel定义了其他请求路由的方法:

    Route::post('/',function(){});
    Route::put('/',function(){});
    Route::delete('/',function(){});
    

    还可以使用通用方法(不推荐使用):

    Route::any('/',function(){});
    

    我们还可以通过Route::match定义几种特定请求方法:

    Route::match(['get','post'],'/',function(){});
    

    路由参数

    在laravel中还可以定义路由参数:

    Route::get('post/{id}',function($id){
        return "文章ID: ".$id;
    });
    

    此时,通过localhost/post/100,就可以访问id=100的文章。还可以定义可选路由参数:

    Route::get('post/{id?}',function($id=1){
        return "文章ID: ".$id;
    });
    

    如果访问localhost/post/就会返回id=1的文章

    还可以为路由参数指定正则表达式,约束路由参数范围:

    //id只能是数字
    Route::get('page/{id}', function ($id) {
        return '页面ID: ' . $id;
    })->where('id', '[0-9]+');
    
    //name只能是大小写字母
    Route::get('page/{name}', function ($name) {
        return '页面名称: ' . $name;
    })->where('name', '[A-Za-z]+');
    
    //定义多个路由参数约束规则
    Route::get('page/{id}/{slug}', function ($id, $slug) {
        return $id . ':' . $slug;
    })->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+']);
    

    路由命名

    为路由起名,主要是为了在控制器或者视图类中引用。路由命名示例如下:

    Route::get('user/{id?}', function ($id = 1) {
        return "用户ID: " . $id;
    })->name('user.profile');
    

    此时在视图中,就可以使用命名路由:

    <a href="{{ route('user.profile', ['id' => 100]) }}">
    // 输出:http://blog.test/user/100
    

    路由分组

    在网络应用程序中,我们可以给路由分组,比如前后台分组,还可以根据其他特征,比如路由前缀、子域名、控制器命名空间、是否使用相同的中间件等。
    定义路由分组,主要是为了让代码可读性更好,便于维护。

    根据命名空间分组

    //前台路由组
    Route::group(['namespace' => 'Home'], function(){
        // 控制器在 "AppHttpControllersHome" 命名空间下
        Route::get('/', 'IndexController@index');
    });
    
    //后台路由组
    Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function(){
        // 控制器在 "AppHttpControllersAdmin" 命名空间下
        Route::get('/', 'AdminController@index');
    });
    
    // 或者用另外一种写法:
    Route::namespace('Admin')->prefix('admin')->group(function() {
         // AppHttpControllersAdminAdminController
         Route::get('/', 'AdminController@index');
    });
    

    此时访问 domain(你的域名)即可访问前台,domain/admin 即可访问admin后台

    中间件

    中间件是对请求的一种过滤或重定向功能,比如认证中间件,只有通过认证才能通过某些路由访问相应的功能。不同的路由可以通过相同的中间件进行分组:

    Route::middleware('auth')->group(function () {
        Route::get('dashboard', function () {
            return view('dashboard');
        });
        Route::get('account', function () {
            return view('account');
        });
    });
    

    上面使用dashboard,account两个路由时,必须通过认证。

    路由路径前缀

    某些路由可以定义相同的前缀便于区分功能,可以使用Route::prefix对路由进行分组:

    Route::prefix('api')->group(function () {
        Route::get('/', function () {
            // 处理 /api 路由
        })->name('api.index');
        Route::get('users', function () {
            // 处理 /api/users 路由
        })->name('api.users');
    });
    

    子域名路由

    在laravel中,可以为不同的应用子系统设置不同的子域名,这时可以通过设置子域名路由访问不同的子系统:

    Route::domain('test.blog.com')->group(function () {
        Route::get('/', function () {
            // 处理 http://test.blog.com 路由
        });
    });
    

    还可以通过参数方式设置子域名,适用于网站拥有多租户的场景,比如建站系统,多家公司通过定义二级域名访问自己的网站。

    Route::domain('{account}.yoursite.com')->group(function () {
        Route::get('/', function ($account) {
            //
        });
        Route::get('user/{id}', function ($account, $id) {
            //
        });
    });
    

    注意:这种情况下,$account永远是所有分组路由的第一个路由参数。

    路由命名前缀

    除了通过上述共同特征对路由进行分组外,对于某一类资源路由,比如用户,往往拥有相同的路由命名前缀,如 user.,我们还可以基于这一特征对路由进行分组,使用 Route::name 方法即可实现:

    // 路由命名+路径前缀
    Route::name('user.')->prefix('user')->group(function () {
        Route::get('{id?}', function ($id = 1) {
            // 处理 /user/{id} 路由,路由命名为 user.show
            return route('user.show');
        })->name('show');
        Route::get('posts', function () {
            // 处理 /user/posts 路由,路由命名为 user.posts
        })->name('posts');
    });
    
  • 相关阅读:
    git---如何解决The authenticity of host can't be established.
    前端模板引擎artTemplate.js
    微信小程序
    小程序的项目结构设计
    拖拽插件SortableJS
    iscroll.js的简单使用方法
    头疼的闭包
    关于setTimeout的妙用前端函数节流
    webpack 加载动态图片
    在React中实现条件渲染的7种方法
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878916.html
Copyright © 2011-2022 走看看