• Laravel 简单入门,路由的使用(一)


    一、安装 Laravel

    Laravel 使用 Composer 来管理项目依赖。因此,在使用 Laravel 之前,请确保您的机器上已经安装了 Composer。

    composer create-project --prefer-dist laravel/laravel blog

     

    二、路由的定义

    1、路由的定义文件在根目录 routes/web.php 中,可以采用了:

    (1)::get()这个方法,它接受的就是 GET 提交
    (2)::post()、::put()、::delete()是表单和 Ajax 的提交接受方式
    (3)::any()表示不管你是哪种提交方式,我智能的全部接收响应
    (4)::match()表示接收你指定的提交方式,用数组作为参数传递
    //只能接受get请求
    Route::get("index",function (){
        return "Hello,Laravel!";
    });
    //只能接受get请求
    Route::post("index",function (){
        return "Hello,Laravel!";
    });
    //全部接收响应
    Route::any("index",function (){
        return "Hello,Laravel!";
    });
    //match()表示接收你指定的提交方式
    Route::match(['get','post'],'index',function (){
        return "Hello,Laravel!";
    });
    //http://la8.com/index

    2、路由参数可分为必填参数和可选参数

    //必填参数,http://la8.com/user/1
    Route::get('user/{id}', function ($id) {
        return 'User '.$id;
    });
    //多个参数,http://la8.com/posts/1/comments/2
    Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
        return 'posts:'.$postId.',comments:'.$commentId;
    });
    
    //可选参数
    Route::get('user/{name?}', function ($name = null) {
        return $name;
    });

     3、正则表达式约束

    你可以使用路由实例上的 where 方法约束路由参数的格式。where 方法接受参数名称和定义参数应如何约束的正则表达式:

    Route::get('user/{id}/{name}', function ($id, $name) {
        return 'User '.$id.',name:'.$name;
    })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
    如果想让约束 id 只能是 0-9 之间作用域全局范围,可以在模型绑定器里设置;模型绑定器路径为:appProvidersRouteServiceProvider 的 boot()方法;
    public function boot()
    {
        //
        Route::pattern('id', '[0-9]+');
        parent::boot();
    }
    注:如果 id 已经被全局约束,在某个局部你想让它脱离约束,可以如下操作:...->where('id', '.*')

    4.路由重定向

    可以设置访问一个路由的 URI,跳转到另一个路由的 URI,在web.php具体如下:
    Route::redirect('index', 'task');

    5、路由命名

    路由命名可以方便地为指定路由生成 URL 或者重定向。通过在路由定义上链式调用 name 方法可以指定路由名称

    //通过设置路由来访问创建好的控制器,参数二:控制器@方法名
    Route::get("task/url","TaskController@url")->name('task.url');
    //http://la8.com/task/url

    注意:路由命名必须是唯一的

    6、路由分组和前缀

    路由分组功能是为了让大量路由共享路由属性,包括中间件、命名空间等;
    //route分组
    Route::group(['prefix'=>'api'],function (){
        Route::get("test2",function (){
            return "index";
        });
    });
    
    //route分组,推荐使用
    Route::prefix('api')->group(function (){
        Route::get("test2",function (){
            return "index";
        });
    });

    prefix 方法将会为路由组中的每一个 URI 添加前缀。例如,您可以给该组中所有的 URI 添加 admin 的前缀:

    Route::prefix('admin')->group(function () {
        Route::get('users', function () {
            return "users";
        });
    });
    //http://la8.com/admin/users
    7、命名空间,控制器嵌套

     在appHttpControllersAdminManageController.php控制器:

    //控制器嵌套,命名空间的设置
    Route::namespace('Admin')->group(function (){
        Route::get("manage","ManageController@index");
    });
    //http://la8.com/manage

    8、路由名称前缀

    //方式一
    Route::group(['as'=>'lhs.'], function () {
        Route::get('roc', function () {
            //route() 函数为指定的路由生成路由 URL。
            return route('lhs.index');//输出:http://la8.com/roc
        })->name('index');
    });
    
    //方式二
    Route::name('lhs.')->group(function () {
        Route::get('roc', function () {
            //route() 函数为指定的路由生成路由 URL。
            return route('lhs.users');//输出:http://la8.com/roc
        })->name('users');
    });

    9、路由回退

    如果我们跳转到了一个不存在路由时,会产生 404 错误,体验不佳;可以使用回退路由,让不存在的路由自动跳转到你指定的页面去;
    Route::fallback(function (){
       return redirect("/");
    });

    注:回退路由,注意要放在最底部

    10、路由重定向

    (1). 重定向使用助手函数 redirect()的 to()方法,注意需要 return 才能跳转;
    return redirect()->to('/'); //跳到首页 
    return redirect()->to('task'); //跳转到 task 
    return redirect()->to('task/url'); //跳转到 task/url
    (2). 也可以直接使用快捷方式直接进行跳转;
    return redirect('/'); //跳到首页 return 
    redirect('task'); //跳转到 task return 
    redirect('task/url'); //跳转到 task/url
    (3). redirect()助手有一个对应的 facade 模式对象;
    return Redirect::to('/'); //facade 模式,但需要 use 引入
    (4). 使用 redirect()的 route()方法,可以跳转到指定的命名路由 URI; 
    return redirect()->route('task.index'); //注意和 route()方法区别
    (5). 使用 redirect()的 back()方法,可以重定向到上一个页面中;
    return redirect()->back();
    return back(); //快捷方式
    (6). 使用 redirect()的 action()方法,可以直接重定向到控制器方法;
    return redirect()->action('TaskController@index'); //需注册路由 
    return redirect()->action('TaskController@index', ['id'=>10]);
    (7). 使用 redirect()的 away()方法,跳转到外部链接;
    return redirect()->away('http://www.baidu.com'); //不带任何编码

     11、表单伪造和 CSRF 保护

    HTML表单支持GET请求,但表单不支持 PUT, PATCH 或 DELETE 请求

    Route::get('task/form', 'TaskController@form');
    Route::any('task/getform', function () {
        return IlluminateSupportFacadesRequest::method();
    });
    <form action="/task/getform" method="post">
        <button type="submit">提交</button>
    </form>
    表单页以 post 发送,路由也使用 post 接受,以下表单提交会出现 419 错误;
    这是为了避免被跨站请求伪造攻击,框架提供了 CSRF 令牌保护,请求时验证;
    <input type="hidden" name="_token" value="{{csrf_token()}}">

    HTML 表单调用请求方式为 PUT, PATCH 或 DELET 的路由时,您需要在表单中添加一个 _method 的隐藏域。_method 的值将会作为 HTTP 请求的方法:

    <form action="/task/getform" method="post">
        <input type="hidden" name="_method" value="PUT">
        <input type="hidden" name="_token" value="{{csrf_token()}}">
        <button type="submit">提交</button>
    </form>
    对于 CSRF 令牌保护和表单伪造提交方式,也支持快捷方式的声明,如下:
    @csrf 
    @method('PUT')

    laravel官网:https://learnku.com/docs/laravel/8.x/installation/9354

  • 相关阅读:
    AcWing 204. 表达整数的奇怪方式 / Strange Way To Express Integers
    Codeforces Edu Round 67 A-C + E
    Codeforces Edu Round 66 A-E
    Codeforces Edu Round 65 A-E
    Codeforces Edu Round 64 A-D
    Codeforces Edu Round 63 A-E
    Codeforces Edu Round 62 A-E
    Codeforces Edu Round 61 A-C + F
    python 线程池和锁
    python 线程
  • 原文地址:https://www.cnblogs.com/bushui/p/14164281.html
Copyright © 2020-2023  润新知