文章
问答
冒泡
Laravel框架基础篇

这次公司的一个小程序项目用到了Laravel框架,我之前并没有接触过php,所以也是一个初学者;Laravel框架用官方自己的话说是:一个具有表现力、优雅语法的 Web 应用程序框架。Laravel 努力提供令人惊叹的开发人员体验,同时提供强大的功能,例如彻底的依赖注入、富有表现力的数据库抽象层、队列和计划作业、单元和集成测试等。一个渐进式框架,一个可扩展的框架等。

首先安装步骤看官方的:https://laravel.com/docs/8.x#why-laravel,php和nginx环境大家可以使用NPM去启动,这里我也一一叙述了。

常见的Http路由:对页面的常见的请求方式有GET和POST,现在我们来自定义一个/hello请求(GET请求)

Route::get('/hello',function(){
    return " Laravel[GET]!";
});

接着在浏览器中输入:http://laravel.app:8000/hello

输出:

Hello Laravel[GET]!

POST请求路由示例:

Route::get('/postTest',function(){
    $csrf_token = csrf_token();
    $form = <<<FORM
        <form action="/hello" method="POST">
            <input type="hidden" name="_token" value="{$csrf_token}">
            <input type="submit" value="Test"/>
        </form>
FORM;
    return $form;
});

Route::post('/hello',function(){
    return " Laravel[POST]!";
});

首先我们定义一个/testPost页面用于提交POST请求表单,在http://laravel.app:8000/postTest页面点击“Test”按钮,页面跳转到http://laravel.app:8000/hello并显示:

Laravel[POST]!

当然也可以使用Route门面上的match方法去匹配多种请求的方式,列如:

Route::match(['get','post'],'/hello',function(){
   return "Laravel!";
});

又或者用any方法,效果都是一样的:

Route::any('/hello',function(){
    return "Laravel!";
});

必选参数:

Route::get('/hello/{name}',function($name){
    return "{$name}!";
});

接着在浏览器中访问http://laravel.app:8000/Laravel输出:

Laravel!

也可以指定多个参数:

Route::get('/hello/{name}/by/{user}',function($name,$user){
    return "{$name} by {$user}!";
});

接着在浏览器中输入http://laravel.app:8000/Laravel/by/huaguniang则会输出:

Laravel by huaguniang!

注意以上参数是必选的,如果没有输入参数会抛出MethodNotAllowedHttpExceptionNotFoundHttpException异常。此外闭包函数中的参数与路由参数一一对应。

现在我们来看路由命名和路由分组:

可以使用as关键字给路由命名:

Route::get('/hello/laravelTest',['as'=>'test',function(){
    return 'Laravel!';
}]);

路由命名可以让我们在使用route函数生成指向该路由的URL或者生成跳转到该路由的重定向链接时更加方便:

Route::get('/testNamedRoute',function(){
   return route('test');
});

接下来我们在浏览器中访问http://laravel.app:8000/testNamedRoute时输出http://laravel.app:8000/hello/laravelTest,然后我们修改上述闭包内代码:

Route::get('/testNamedRoute',function(){
    return redirect()->route('test');
});

再次在浏览器中访问http://laravel.app:8000/testNamedRoute时会跳转到http://laravel.app:8000/hello/laravelTest

甚至还可以在使用带参数的路由命名:

Route::get('/hello/laravelTest/{id}',['as'=>'test',function($id){
    return 'Laravel '.$id.'!';
}]);

对应的测试路由定义如下:

Route::get('/testNamedRoute',function(){
    return redirect()->route('test',['id'=>1]);
});

接着我们在浏览器中访问http://laravel.app:8000/testNamedRoute时会跳转http://laravel.app:8000/hello/laravelTest/1。

现在我们来看看使用路由分组时如何定义路由命名,直接看官方的例子:

Route::group(['as' => 'admin::'], function () {
    Route::get('dashboard', ['as' => 'dashboard', function () {
        //
    }]);
});

Route门面group方法中使用一个as关键字来指定该路由群组中所有路由的公共前缀,然后再在里面每个路由中使用as关键字为该路由命名。这样我们可以通过如下方式来生成该路由URL:

Route::get('/testNamedRoute',function(){
    return route('admin::dashboard');
});

路由分组:路由分组就是将一组拥有相同属性(中间件、命名空间、子域名、路由前缀等)的路由使用Route门面的group方法聚合起来。

首先我们在/app/Http/Middleware目录下生成一个TestMiddleware.php文件,可以使用Artisan命令生成一个测试用的中间件MiddlewareTest

php artisan make:middleware MiddlewareTest

 

打开该文件编辑MiddlewareTest类的handle方法:

public function handle($request, Closure $next)
{
    if($request->input('age')route('refuse');
    return $next($request);
}

接下来我们可以在中间件定义业务逻辑未成年人不可以观看。

然后我们打开/app/Http/Kernal.php文件,新增MiddlewareTestKernel$routeMiddleware属性:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'test' => \App\Http\Middleware\MiddlewareTest::class,
];

接下来我们在routes.php中定义路由如下:

Route::group(['middleware'=>'test'],function(){
    Route::get('/write/laravel',function(){
        //使用Test中间件
    });
    Route::get('/update/laravel',function(){
       //使用Test中间件
    });
});

Route::get('/age/refuse',['as'=>'refuse',function(){
    return "未成年人不可以观看哦!";
}]);

这样当我们在浏览器中访问http://laravel.app:8000/write/laravel?age=15或者http://laravel.app:8000/update/laravel?age=15时就会跳转到http://laravel.app:8000/age/refuse,并显示:

未成年人不可以观看哦

好了关于Laravel框架Http路由,我先总结一部分,剩下的我会陆续总结完毕,中间可能会有遗漏,毕竟也是看着教程学习的。


关于作者

Taurus
获得点赞
文章被阅读