这次公司的一个小程序项目用到了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!
注意以上参数是必选的,如果没有输入参数会抛出MethodNotAllowedHttpException或NotFoundHttpException异常。此外闭包函数中的参数与路由参数一一对应。
现在我们来看路由命名和路由分组:
可以使用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文件,新增MiddlewareTest到Kernel的$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路由,我先总结一部分,剩下的我会陆续总结完毕,中间可能会有遗漏,毕竟也是看着教程学习的。