laravel5.8学习笔记

jiang 发表于2019-10-25 23:10:05 最后修改于2025-01-22 13:03:54 1551

composer安装laravel

方式一

composer create-project --prefer-dist laravel/laravel=5.8.* myblog

方式二(全局)

composer global require laravel/installer
已安装可升级
composer global update composer global about命令查找 Composer 的全局安装路径
laravel new myblog 只在本项目使用镜像
composer config repo.packagist composer https://packagist.phpcomposer.com
此操作会在composer.json尾行加入


"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    } 
}

全局配置镜像 -g 为全局
composer config -g repo.packagist composer https://packagist.phpcomposer.com
解除镜像 -g为全局 解除项目去掉 -g
composer config -g --unset repos.packagist


laravel本地化用于验证错误提示等

安装语言包
composer require caouecs/laravel-lang
vendor/caoue/laravel-lang/src 下的zh-CN复制到 resources/lang 目录下
修改config/app.php

  • 'locale' => 'zh-CN'> 错误提示
  • 'timezone' => 'PRC' 时区
  • 'faker_locale' => 'zh_CN' 数据填充

    laravel目录

    bootstrap 启动目录 自动加载文件 缓存类 保证在linux下其cache可写 chmod -R 777 bootstrap
    storage 储存目录 存放缓存和日志文件 保证在linux下可写 chmod -R 777 storage
    目录图


    laravel路由

    routes文件夹下的web路由 web.php


use Illuminate\Support\Facades\Route;

// get
Route::get('/',function(){
    return view('welcome');
});
// post
Route::post();
// any
Route::any();
// get or post
Route::match(['post','get'],'/',$callback);
// 重定向路由,默认302暂时 第三个参数可使用301永久
Route::redirect('/here','/there');
// 301重定向
Route::permanentRedirect('/here', '/there');
// 视图路由
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
// 参数路由
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    return 'ok';
});
// 可选参数 记得指定默认值
Route::get('user/{name?}', function ($name = null) {
    return $name;
});
// 参数约束
Route::get('user/{id}', function ($id) {
    return 'ok';
})->where('id', '[0-9]+');
// 路由命名
Route::get('user/profile', 'UserProfileController@show')->name('profile');
// 生成 URL
$url = route('profile');
url('profile');
// 生成重定向
return redirect()->route('profile');
redirect('profile');
// 路由组
Route::middleware(['first', 'second'])->group(function () {
    return 'ok';
});
Route::group(['middleware'=>['first','second'],'namespace'=>'Admin'],function () {
    return 'ok';
});
// 子域名路由
Route::domain('{account}.myapp.com')->group(function () {
    return 'ok';
});

// 当前路由信息
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();

laravel Auth内置web认证

  • 修改 config/auth.php 中的设置
  • 配置要验证model继承 use Illuminate\Foundation\Auth\User as Authenticatable;
  • 验证登录
 Auth::attempt(['username'=>$request->username,'password'=>$request->pswd])
  • 获取用户

auth()->user()

laravel Auth内置api认证

配置

  • 在要验证的model中添加字段

$table->string('api_token', 80)->after('password')->unique()->nullable()->default(null);
  • 如需要定义为其他字段修改 config/auth.php 中的 storage_key


'api' => [
    'driver' => 'token',
    'provider' => 'users',
    'hash' => false,
    'storage_key' => 'api_token', 
],

路由


middleware('auth:api')

请求

带上 'Authorization' => 'Bearer '.$token


laravel加密解密

加密 最后密码字段255长度


// 加密
$re1=Hash::make('hhh'); // 相当于 bcrypt('hhh')
$re2=bcrypt('hhh');

$re3=encrypt('hhh');
// 解密
Hash::check('hhh',$re1);

decrypt($re);

laravel中间件

  • 创建中间件php artisan make:middleware CheckAge
  • 注册中间件 app/Http/Kernel.php 中注册
    csrf保护添加白名单修改 app\Http\Middleware\VerifyCsrfToken.php 中的 $except 属性

protected $except = [
    'stripe/*',  
    'http://example.com/foo/bar',
    'http://example.com/foo/*',
    'admin/login'
];

body中使用 @csrf head中头部csrf


<meta name="csrf-token" content="{{ csrf_token() }}">

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
});
$.ajax({
    headers: {'X-CSRF-TOKEN': {{csrf_token()}} }
})

laravel Request对象

依赖注入 Request $request

全局函数 request()


$name = $request->input('name','default');
$name = $request->get('name','default');
// 在使用动态属性时,Laravel 首先会在请求载体中查找参数的值。
//如果该值不存在,Lavarel 将在路由参数中搜索。
$name = $request->name;
// 返回请求路径 如果请求的路径是 http://domain.com/foo/bar, path 方法将会返回 foo/bar
$uri = $request->path();
// is 可以验证传入的请求路径是否与给定的模式匹配。 在这个方法中,
//你也可以使用  * 字符作为通配符
$request->is('admin/*');
// 获取请求 URL 不附带查询串
$url = $request->url();
// 获取请求 URL 附带查询串
$url = $request->fullUrl();
// 获取请求 Method
$method = $request->method();
$request->isMethod('post');
// 获取所有输入
$input = $request->all();
// input 方法从整个请求载体中获取值(包括查询串), 
//query 方法则仅从查询串中获取值
$name = $request->query('name','default');
// 获取部分 only 方法返回请求中的全部键值对;
//但是它不返回请求中不存在的键值对。
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
// 判断输入值是否存在 返回true
$request->has('name');
// 全部存在返回true
$request->has(['name', 'email']);
// 从请求中获取 Cookies
$value = $request->cookie('name');

laravel Response对象


// 输出状态码和字符串
return response('Hello World', 200)->header('Content-Type', 'text/plain');
// 输出内容和类型
return response($content)
->header('Content-Type', $type)          
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
// 多个响应头
return response($content)->withHeaders([
    'Content-Type' => $type,
    'X-Header-One' => 'Header Value',
    'X-Header-Two' => 'Header Value',
]);
// 将 Cookies 附加到响应中
return response('Hello World')->cookie('name','value',$minutes);
// 默认情况下,Laravel 生成的所有 Cookie 都是经过加密和签名,因此不能被客户端修改或读取。 
//如果你想要应用程序生成的部分 Cookie 不被加密,那么可以使用在 app/Http/Middleware 
//目录中 App\Http\Middleware\EncryptCookies 中间件的 $except 属性:
protected $except = ['cookie_name',];
// 文件下载
return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
return response()->download($pathToFile)->deleteFileAfterSend();
// 文件响应
return response()->file($pathToFile);
return response()->file($pathToFile, $headers);
// 返回json 数组 http状态码
return response()->json(['id'=>1,'name'=>'jone'],200);

laravel redirect()


// 跳转
redirect('home/dashboard');
// 跳转路由别名
redirect()->route('login');
// 跳转路由别名 带参数
redirect()->route('profile', ['id' => 1]);
// 默认将user实例的id绑定到id
redirect()->route('profile', [$user]);
// 跳转控制器
redirect()->action('HomeController@index');
// 跳转控制器 带参数
redirect()->action('UserController@profile', ['id' => 1]);
// 跳转带一次性session
redirect('dashboard')->with('status', 'Profile updated!');
// 带错误 withSuccess('成功')= with('success','成功')
redirect()->back()->withErrors('密码或用户名错误')

laravel url()和asset()

  • url()

// 可分配参数
url('users',['id'=>2],$secure=null);
// 得到当前的url不带查询字符
echo url()->current();
// 得到当前的url带查询字符
echo url()->full();
// 得到之前的请求
echo url()->previous();
// 控制器行为的 URL
$url = action('HomeController@index');
// 或者
use App\Http\Controllers\HomeController;
$url = action([HomeController::class, 'index']);
$url = action('UserController@profile', ['id' => 1]);
  • asset()

// 多用于资源的链接分配 asset('images/7.png',$secure=null);


***
# laravel session()

```php

// 设置
session(['key' => 'value']);
// 获取
$value = session('key', 'default');
// 所以数据
session()->all();
// 是否存在某值 该值存在且不为 null,那么 has 方法会返回 true
session()->has('users');
// exists 方法。如果值存在或为null,则 exists 方法返回 true
session()->exists('users');
// push 方法可以将一个新的值添加到 Session 数组内。例如,假设 user.teams 这个键是包括团队名称的数组
session()->push('user.teams', 'developers');
// pull 方法可以只使用一条语句就从 Session 中检索并删除一条语句
session()->pull('key', 'default');
// 闪存数据
session()->flash('status', 'Task was successful!');
// 删除数据 删除一条
session()->forget('key');
// 删除全部
session()->flush();
// 重新生成 Session ID
session()->regenerate();

laravel 表单验证

方法一 $request自带


// 不符合验证规则自动跳转
$validatedData = $request->validate($rule,$meg);

方法二 Validator门面


use Validator;

$validator = Validator::make($request->all(),$rules,$msg);          
if ($validator->fails()) {
    return redirect('register')->withErrors($validator, 'login');
}
// 获取验证后的数据
$validator->validated();

方法三 验证类

php artisan make:request StoreBlogPost


namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class TestRequest extends FormRequest
{
    // 验证权限
    public function authorize()
    {
        return false;
    }
    // 规则
    public function rules()
    {
        return [
            // 规则数组
        ];
    }
    // 提示信息
    public function messages()
    {
        return [
            // 提示信息数组
        ];
    }
}

php常用内置函数

小数不能直接比较如


// bool(false)
var_dump(0.1==1-0.9);
// bool(true)
var_dump(0.9==1-0.1);
// 如需比较则使用bccomp
// 比较小数点后5位是否相同
// 返回int 0相等 1参数一大于参数二 -1则参数一小于参数二
var_dump(bccomp(0.1,1-0.9,5));
?>

布尔输出


echo(true); // 1
echo(false); // 空

php内置全局函数


function fun() {
    func_num_args(); // return int 参数个数
    func_get_args(); // return array 传入的参数
}

static self

static 当前对象的类 (静态延时绑定) self 当前类名的类


小提示 now
头像
这里还没有评论,快评论吧。
头像

jiang

积土而为山,积水而为海。

Copyright © 2017-2020 嘉丽谷 版权所有