Laravel学习笔记

这篇博客详细介绍了Laravel框架的基础功能,包括路由、控制器、请求处理、URL生成、Cookie和Session管理。深入探讨了Blade模板、数据库操作、ORM(对象关系映射)以及表单验证。此外,还讲解了CSRF保护、中间件的创建和使用,以及前端开发中的Blade模板和视图。内容涵盖从基础到进阶,适合Laravel初学者和开发者参考。
摘要由CSDN通过智能技术生成

基础功能

路由
  • 对路由参数约束限制
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
  1. 首先,获取 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
  1. 获取
//获取 session 值
return session('_token');
//获取 session 值并设置默认值
return session('name', 'no session name');
  1. 判断
return Session::has('name'); //判断是否存在且不为 null
return Session::exists('name'); //判断是否存在,即使是 null也判为存在
  1. 增加
//设置 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');
  1. 删除
//删除一条数据
Session::forget('name'); 
return Session::get('name');
//删除多条数据
Session::forget(['name'])
//删除一条数据,并返回
Session::pull('info');
//删除所有数据
Session::flush();
  1. session ID
//重新生成 SessionID
Session::regenerate();
//获取 SessionID
return Cookie::get('laravel_session');
中间件

中间件就是当程序接收 HTTP 请求时,拦截后进行过滤和处理。

  1. 创建
php artisan make:middleware Check

生成Http/Middleware/Check.php

修改此文件:

//固定方法,固定格式
public function handle($request, Closure $next)<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值