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(可用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章