laravel 技巧总结

一些使用laravel时用到的一些小技巧

一·添加自定义函数##

建立文件夹,放在app目录下,比如:

然后再 conposer.json文件中的自动加载项加入你添加的自定义文件:


"autoload": {
        "classmap": [
            "database"
        ],
        "files":[
            "app/Helpers/Helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    

然后运行:

composer dump-autoload

二·开发项目必备

1.ide-hlper

composer require --dev barryvdh/laravel-ide-helper

然后在

app/Providers/AppServiceProvider.php file, 添加


public function register()
{
    if ($this->app->environment() !== 'production') {
        $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
    }
    // ...
}

2.laravel-debugbar

1). 使用 Composer 安装该扩展包:

composer require barryvdh/laravel-debugbar

2). 安装完成后,修改 config/app.php 在 providers 数组内追加 Debugbar 的 Provider


'providers' => [
    ...
    Barryvdh\Debugbar\ServiceProvider::class,
],

同时在 aliases 数组内追加如下内容


'aliases' => [
    ...
    'Debugbar' => Barryvdh\Debugbar\Facade::class,
]

3). 接下来运行以下命令生成此扩展包的配置文件 config/debugbar.php:

php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

打开 config/debugbar.php,将 enabled 的值设置为:

'enabled' => env('APP_DEBUG', false),
修改完以后, Debugbar 分析器的启动状态将由 .env文件中 APP_DEBUG 值决定。

二 加密解密函数

laravel 当中提供了两种加密解密方式

encrypt和decrypt

你可以使用辅助函数 encrypt 来加密一个值。所有加密值都使用 OpenSSL 与 AES-256-CBC 来进行加密。此外,所有加密过的值都会使用消息认证码(MAC)进行签名,以检测加密字符串是否被篡改过:

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 存储用户保密信息
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function storeSecret(Request $request, $id)
    {
        $user = User::findOrFail($id);

        $user->fill([
            'secret' => encrypt($request->secret)
        ])->save();
    }
}

无序列化加密

加密值在加密期间通过 serialize 传递,这允许对象和数组的加密。因此,接收加密值的非PHP客户端将需要 unserialize 数据。如果想在不序列化的情况下加密和解密值,可以使用 Crypt Facade 的 encryptString 和 decryptString 方法:

use Illuminate\Support\Facades\Crypt;

$encrypted = Crypt::encryptString('Hello world.');

$decrypted = Crypt::decryptString($encrypted);

解密一个值

你可以使用辅助函数 decrypt 来解密一个值。如果该值不能被正确解密,例如当 MAC 无效时,会抛出异常 Illuminate\Contracts\Encryption\DecryptException:


use Illuminate\Contracts\Encryption\DecryptException;

try {
    $decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
    //
}

哈希

Laravel Hash Facade 提供安全的 Bcrypt 哈希保存用户密码。 如果应用程序中使用了 Laravel 内置的 LoginControllerRegisterController 类,它们将自动使用 Bcrypt 进行注册和身份验证

如果用到了laravel auth认证模块,默认是采用这种加密方式

基本用法

你可以通过调用 Hash Facade 的 make 方法来填写密码:


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller;

class UpdatePasswordController extends Controller
{
    /**
     *  更新用户密码
     *
     * @param  Request  $request
     * @return Response
     */
    public function update(Request $request)
    {
        // Validate the new password length...

        $request->user()->fill([
            'password' => Hash::make($request->newPassword)
        ])->save();
    }
}

make 方法还能使用 rounds 选项来管理 bcrypt 哈希算法的加密系数。然而,大多数应用程序还是能接受默认值的:

$hashed = Hash::make('password', [
    'rounds' => 12
]);

根据哈希值验证密码

check 方法可以验证给定的纯文本字符串对应于给定的散列。 如果使用 Laravel 内置的 LoginController,则不需要直接使用该方法,因为该控制器会自动调用此方法:


if (Hash::check('plain-text', $hashedPassword)) {
    // 密码对比...
}

检查密码是否需要重新加密#

needsRehash 函数允许你检查已加密的密码所使用的加密系数是否被修改:


if (Hash::needsRehash($hashed)) {
    $hashed = Hash::make('plain-text');
}

PHPSTORM最新注册码

http://www.0-php.com:1017 --2018/3/12(可用)

发布了33 篇原创文章 · 获赞 1 · 访问量 8304

猜你喜欢

转载自blog.csdn.net/u012914309/article/details/103421641