基础功能
路由
- 对路由参数约束限制
Route::get('task/read/{id}', 'TaskController@read')
->where('id', '[0-9]+'); //单个参数
->where(['id'=>'[0-9]+', 'name'=>'[a-z]+']); //多个参数
- 路由重定向
Route::redirect('index', 'task');
Route::redirect('index', 'task', 301); //状态码
前提是先定义好了task路由!
还有一个方法,可以直接让路由跳转返回 301 状态码而不用设置:
Route::permanentRedirect('index', 'task');
使用 redirect()助手结合 route()生成一个重定向跳转,
//生成重定向
return redirect()->route('task.index', ['id'=>10]);
- 路由分组
1 设置子域名,从而限定路由可执行的域名
Route::domain('localhost')->group(function (){
Route::get('read','TaskController@read')->name('read');
Route::get('index','TaskController@index');
});
这样,之前访问的http://127.0.0.1:8000/read就无法再访问,而是要访问http://localhost:8000/read
- 路由回退
可以使用回退路由,让不存在的路由自动跳转到你指定的页面去;
注意:由于执行顺序问题,必须把回退路由放在所有路由的最底部;
Route::fallback(function () {
return redirect('/');
});
2 设置命名空间
Route::namespace('Admin')->group(function () {
});
PS:在 Controller 目录下创建 Admin 目录,再其目录下创建的控制器AdminController.php,其命名空间如下:
namespace App\Http\Controllers\Admin;
- 视图路由
常用的是将路由直接指向控制器,通过方法实现 view()引入视图;
public function index()
{
return view(‘task’, [‘id’=>10]);
}
控制器
- 使用命令生成一个:
php artisan make:controller TaskController
(切换到项目根目录下执行此命令)
生成的控制器目录在 app\Http\Controllers 下
- 资源控制器
1. 生成资源控制器
php artisan make:controller BlogController --resource
2. 注册资源路由
Route::resource('blogs', 'BlogController'); //单个资源路由
//或者批量定义资源路由
Route::resources([
'blogs' => 'BlogController'
]);
如果我们注册了资源路由,那么如上图的资源路由 URI 和名称均自动创建生效;
请求和依赖注入
- Request 请求
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController
{
//方法会自动得到 Request 对象,这个就是注入
public function index(Request $request)
{
//input 的方法可以获取 http 请求的数据
//localhost:8000/user?name=Mr.Lee
//参数 2 为默认值
$request->input('name', 'no name');
数组/JSON接收方式
return $request->input('select.1.b');
//动态方式获取
$request->name;
使用 all/input()方法,可以获取所有 url 传递过来的参数;
//http://localhost:8000/user?name=Mr.Lee&gender=男&age=100
return $request->all();
}
路由自带参数时,可以通过第二,第三参数接受;
Route::get('/user/{id}/{uid}', 'UserController@index');
public function index(Request $request, $id, $uid)
5. 路由区域,也支持闭包注入 Request;
Route::get('/user', function (Request $request) {
return $request->all();
});
6. 使用 path()方法,可以得到当前的 uri 路径;
return $request->path();
7. 使用 is()方法,可以判断当前的 uri 是否匹配;
//是否是 user/*的 uri,返回布尔值
return $request->is('user/*');
8. 使用 url()和 fullUrl()得到 url 地址,带参数和不带参数区别;
return $request->url();
return $request->fullUrl();
9. 使用 isMethod()来判断 HTTP 请求的方式,get、post 等等;
return $request->isMethod('post');
}
- 其他请求的常用方法
//返回布尔值
$request->boolean('name');
//返回 IP
$request->ip();
//只接受固定参数
$request->only(['age', 'gender']);
//排除不要的参数
$request->except(['name']);
//判断参数是否存在
return $request->has('name');
//判断参数是否全部存在
return $request->has(['name', 'age']);
//判断参数只有一个存在,就返回 true
return $request->hasAny(['name', 'age']);
//判断参数存在,并且不为空
return $request->filled('name');
//判断参数不存在(为空也不行)
return $request->missing('name');
- request()助手函数,使用如下:
return request()->input();
生成URL
//生成指定的 url
$user = User::find(19);
return url('/user/'.$user->id);
如果 url()不给参数,可以当作对象执行更多的方法;
//得到当前 url,不带参数
return url()->current();
//得到当前 url,带参数
return url()->full();
//得到上一个 url
return url()->previous(); //URL::previous()
使用 route()方法,生成命名路由的 url,
Route::any('/url/{id}','UserController@url')->name('url.id');
return route('url.id', ['id'=>5]);
//使用控制器返回 url(经测试,index方法需要在路由中注册后,下面代码才能正常执行)
return action('UserController@index', ['id'=>5]);
生成一个签名 URL,在 URL 后面追加一个哈希签名字符串,用于验证;
return url()->signedRoute('url.id', ['id' => 5]);//这里url.id为设置的路由别名,也就是路由的name
//验证哈希签名
return request()->hasValidSignature()
COOKIE
- 首先,获取 Cookie 有两种方法,具体如下:
//注意 Laravel 中 cookie 都是加密的,原生 cookie 只能获取加密信息
//使用 request()->cookie 获取解密后的 cookie 信息
return request()->cookie('laravel_session');
//使用 Cookie::也可以获取,引入 Illuminate\Support\Facades\Cookie;
return Cookie::get('laravel_session');
新增
Cookie::queue('age', 100, 10);
SESSION
- 获取
//获取 session 值
return session('_token');
//获取 session 值并设置默认值
return session('name', 'no session name');
- 判断
return Session::has('name'); //判断是否存在且不为 null
return Session::exists('name'); //判断是否存在,即使是 null也判为存在
- 增加
//设置 session 值
session(['name' => 'Mr.Lee']);
//也支持 request()存储
Session::put('name', 'MrWang');
使用 push()方法,可以存储数组,
Session::push('info.name', 'Mr.Lee');
Session::push('info.name', 'Mr.Wang');
Session::push('info.name', 'Mr.Zhang');
return Session::get('info');
//存储的 session 只能被获取一次,然后自动删除,flash 也称为闪存数据
Session::flash('name', 'Mr.Lee');
如果使用闪存数据,本次请求不要立刻自行删除,可以使用 reflash();
//本次请求获取,不要删除数据,给下一次请求时再自行删除,这是保存所有闪存数据
Session::reflash(); //Session::keep(['name']);保存单独的闪存数据
return Session::get('name');
- 删除
//删除一条数据
Session::forget('name');
return Session::get('name');
//删除多条数据
Session::forget(['name'])
//删除一条数据,并返回
Session::pull('info');
//删除所有数据
Session::flush();
- session ID
//重新生成 SessionID
Session::regenerate();
//获取 SessionID
return Cookie::get('laravel_session');
中间件
中间件就是当程序接收 HTTP 请求时,拦截后进行过滤和处理。
- 创建
php artisan make:middleware Check
生成Http/Middleware/Check.php
修改此文件:
//固定方法,固定格式
public function handle($request, Closure $next)<