Laravel学习笔记(二)—— 路由,请求接收与转发

2020-05-09 10:16:00 浏览数 (1)

前言

对于新手而言,你可能只需要会使用Laravel就行了,这也是我第一章没写Laravel生命周期的原因。(~~其实目前我也不是蛮懂,我怕写了被打脸~~)不过,学到后面肯定是要把她(Laravel)摸透的,暂时先留个坑,学会了再来填坑。毕竟,在我写笔记的时候,我也是一个Laravel的新手、初学者。顶多就比你们学在前面一点,所以一些东西我也不是太敢写,怕自己错误的思想误导你们。所以,要是文章有错误,还请在评论中留言我更正,免得博主一人的错误变成大家的错误了。

路由文件—— routes文件夹

上篇文章我有提到routes文件夹里四个文件,web.php、api.php、 console.php 和 channels.php。这些文件都是路由文件,唯一的区别是它们给不同的入口使用。我们初学者主要探讨的还是web.php的用法。

默认路由介绍

默认路由文件

代码语言:javascript复制
<?php
Route::get('/', function () {
    return view('welcome');
});

对于默认的web.php文件,它里面的路由代表什么呢?

若符合get请求,并定位到"/"路径,就返回'welcome'视图。

我们继续看看'welcome'视图文件,看看究竟是什么?

这就是默认的welcome视图,当我们部署好默认的Laravel项目后,打开浏览器后看到的是Laravel的默认welcome界面,就是web.php路由和welcome.blade.php视图文件起的作用。

基本路由

基本上一个简单的路由规则就是按如下格式:

Route::method('uri',func);

如:

代码语言:javascript复制
Route::get('foo', function () {
    return 'Hello World';
});

参数名

注释

method:

请求方式,主要有get|post|put|patch|delete|options

uri:

标识符

func:

匿名函数,返回视图文件或者HTML源码

多请求路由 match 和 any

match用于匹配多个method,any用于匹配所有类型的请求。

代码语言:javascript复制
Route::match(['post', 'get'],'foo', function () {
    return 'Hello World';
});#匹配post和get

Route::any('foo', function () {
    return 'Hello World';
});#匹配所有类型的请求

路由参数

用于传递参数,比如www.test.com/artice/1,获取ID为1的文章

Laravel路由中,用一对{}来表示路由参数,参数名称写入括号内。然后可以通过$参数名的形式调用

代码语言:javascript复制
Route::get('/{name}', function ($name) {
    return $name;
});#将参数返回

路由别名

为以后调用路由规则做准备。 用中括号将 "as" => "name" 和 匿名函数包起来形成一个数组,这样就可以给路由添加一个别名了。

PS:别名的关键词是 as

以上个例子为例,路由别名写法如下:

代码语言:javascript复制
Route::get('/{name}', ["as" => "name", function ($name) {
    return $name;
}]);#一个名叫 name 的路由,可以通过route('name')访问到该条路由规则

路由群组

为便于各类路由规则的管理,将同一个分类下的路由放入一个群组内。 比如:/user/add、/user/delete这种user组别的可以放在user组下的路由规则中 /admin/add、/admin/delete这种admin组别的放在admin组中。这样既方便了管理,又防止了不同类别的路由规则起冲突。具体设置方式如下:

代码语言:javascript复制
Route::group(['prefix' => 'user'], function(){
    #这里放user组的路由规则
    Route::get('add', function () {
        return 'add';
    });

    Route::get('delete', function () {
        return 'delete';
    });
});

这样其实和以下效果一样,但是避免了过多的路由规则互相干扰,代码也更清晰。

代码语言:javascript复制
Route::get('/user/add', function () {
    return 'add';
});

路由规则在项目开发中的主要用法

这里控制器的可能有些超纲,控制器是下一章节的内容,这一段落主要介绍开发过程中路由的基本用法。 1. 路由参数 2. 返回视图 3. 转到控制器

路由参数已经写过了,这里重点写一下转到控制器,开发中一般都是转到控制器,让控制器进行处理后返回视图和数据再输出至浏览器。

返回视图的方法可以参照默认的路由规则

代码语言:javascript复制
<?php
Route::get('/', function () {
    return view('welcome');
});# 返回welcome视图

请求转到控制器的某个方法处理后,再输出。

web.php

代码语言:javascript复制
<?php
Route::get('/', function () {
    return view('welcome');
});# 默认路由规则

Route::get('/{name}', 'TestController@index');# 转发请求至TestController控制器中的index方法

TestController.php

代码语言:javascript复制
<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class TestController extends Controller
{
    public function index($name){
        return 'TestController' . $name;
    }
}

以上只是最简单的用法,结合了路由参数和路由转发至控制器的写法。我相信屏幕前的你应该有更好的想法,那么动动指尖,完成你的想法吧!

0 人点赞