9月20日知識(shí)點(diǎn)記錄


一.Laravel表單驗(yàn)證

創(chuàng)建控制器并在添加方法shore()中編寫驗(yàn)證

 public function store(Request $request)
{
    // 驗(yàn)證以及保存提交的數(shù)據(jù)...
}

編寫驗(yàn)證邏輯

validate 方法會(huì)接收 HTTP 傳入的請(qǐng)求以及驗(yàn)證的規(guī)則庐椒。如果驗(yàn)證通過(guò)瓣颅,你的代碼就可以正常的運(yùn)行。若驗(yàn)證失敗,則會(huì)拋出異常錯(cuò)誤消息并自動(dòng)將其返回給用戶。在一般的 HTTP 請(qǐng)求下劲绪,都會(huì)生成一個(gè)重定向響應(yīng),對(duì)于 AJAX 請(qǐng)求則會(huì)發(fā)送 JSON 響應(yīng)

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required|unique:posts|max:255',//標(biāo)題不為空,post提交,最長(zhǎng)255
        'body' => 'required',//主要內(nèi)容不為空
    ]);

    //成功上傳新數(shù)據(jù)贾富,將其保存到數(shù)據(jù)庫(kù)...    
}

嵌套屬性

   $this->validate($request, [
       'title' => 'required|unique:posts|max:255',
       'author.name' => 'required',//在驗(yàn)證規(guī)則中使用「點(diǎn)」語(yǔ)法來(lái)指定他們
       'author.description' => 'required',
   ]);

顯示驗(yàn)證錯(cuò)誤

Laravel 會(huì)自動(dòng)把用戶重定向到先前的位置歉眷。另外,所有的驗(yàn)證錯(cuò)誤會(huì)被自動(dòng) 閃存至 session
$errors 變量在每次請(qǐng)求的所有視圖中都可以被使用颤枪,你可以很方便的假設(shè) $errors 變量已被定義且進(jìn)行安全地使用

if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>//在視圖中顯示錯(cuò)誤的消息
            @endforeach
        </ul>
    </div>
@endif

自定義閃存的錯(cuò)誤消息格式

在控制器中重寫 formatValidationErrors汗捡。別忘了將 Illuminate\Contracts\Validation\Validator 類引入到文件上方

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;

abstract class Controller extends BaseController
{
    use DispatchesJobs, ValidatesRequests;

    /**
     * {@inheritdoc}
     */
    protected function formatValidationErrors(Validator $validator)
    {
        return $validator->errors()->all();
    }
}

表單請(qǐng)求驗(yàn)證

表單請(qǐng)求是一個(gè)自定義的請(qǐng)求類,里面包含著驗(yàn)證邏輯畏纲。要?jiǎng)?chuàng)建一個(gè)表單請(qǐng)求類扇住,可使用 Artisan 命令行命令 make:request
php artisan make:request StoreBlogPostRequest
新生成的類文件會(huì)被放在 app/Http/Requests 目錄下
public function rules() { return [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]; }
在控制器方法中利用類型提示傳入請(qǐng)求。傳入的請(qǐng)求會(huì)在控制器方法被調(diào)用前進(jìn)行驗(yàn)證盗胀,意思就是說(shuō)你不會(huì)因?yàn)轵?yàn)證邏輯而把控制器弄得一團(tuán)糟

/**
 * 保存?zhèn)魅氲牟┛臀恼隆? *
 * @param  StoreBlogPostRequest  $request
 * @return Response
 */
public function store(StoreBlogPostRequest $request)
{
    // 傳入的請(qǐng)求是有效的...
}

如果驗(yàn)證失敗艘蹋,就會(huì)生成一個(gè)重定向響應(yīng)把用戶返回到先前的位置。這些錯(cuò)誤會(huì)被閃存到 session票灰,所以這些錯(cuò)誤都可以被顯示

授權(quán)表單請(qǐng)求

表單的請(qǐng)求類內(nèi)包含了 authorize 方法女阀。在這個(gè)方法中,你可以確認(rèn)用戶是否真的通過(guò)了授權(quán)屑迂,以便更新指定數(shù)據(jù)

/**
 * 判斷用戶是否有權(quán)限做出此請(qǐng)求浸策。
 *
 * @return bool
 */
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
                  ->where('user_id', Auth::id())->exists();
}

自定義閃存的錯(cuò)誤消息格式
自定義驗(yàn)證失敗時(shí)閃存到 session 的驗(yàn)證錯(cuò)誤格式,可在你的基底請(qǐng)求 (App\Http\Requests\Request) 中重寫 formatErrors,文件上方引入 Illuminate\Contracts\Validation\Validator 類

/**
 * {@inheritdoc}
 */
protected function formatErrors(Validator $validator)
{
    return $validator->errors()->all();
}

自定義錯(cuò)誤消息
(你可以通過(guò)重寫表單請(qǐng)求的 messages 方法來(lái)自定義錯(cuò)誤消息惹盼。此方法必須返回一個(gè)數(shù)組的榛,其中含有成對(duì)的屬性或規(guī)則以及對(duì)應(yīng)的錯(cuò)誤消息)

/**
 * 獲取已定義驗(yàn)證規(guī)則的錯(cuò)誤消息。
 *
 * @return array
 */
public function messages()
{
    return [
        'title.required' => '標(biāo)題是必填的',
        'body.required'  => '消息是必填的',
    ];
}

處理錯(cuò)誤消息
調(diào)用一個(gè) Validator 實(shí)例的 errors 方法逻锐,會(huì)得到一個(gè) Illuminate\Support\MessageBag 的實(shí)例,里面有許多可讓你操作錯(cuò)誤消息的便利方法
$messages = $validator->errors(); echo $messages->first('email')//查看特定字段的第一個(gè)錯(cuò)誤消息
foreach ($messages->get('email') as $message) { //查看特定字段的所有錯(cuò)誤消息雕薪,取所有消息中的一個(gè)數(shù)組,可以使用 get 方法 }
foreach ($messages->all() as $message) { //查看所有字段的所有錯(cuò)誤消息 }
if ($messages->has('email')) { //判斷特定字段是否含有錯(cuò)誤消息 }
echo $messages->first('email', '<p>:message</p>');//獲取格式化后的錯(cuò)誤消息
foreach ($messages->all('<li>:message</li>') as $message) { //獲取所有格式化后的錯(cuò)誤消息 }

自定義錯(cuò)誤消息

通過(guò)傳遞三個(gè)參數(shù)到 Validator::make 方法來(lái)自定義驗(yàn)證消息

$messages = [
    'required' => ':attribute 的字段是必要的。',//:attribute 占位符會(huì)被通過(guò)驗(yàn)證的字段實(shí)際名稱所取代
];

$validator = Validator::make($input, $rules, $messages);

指定自定義消息到特定的屬性
$messages = [ 'email.required' => '我們需要知道你的 e-mail 地址线罕!',//屬性名稱后加上「.」符號(hào)和指定驗(yàn)證的規(guī)則 ];

可用的驗(yàn)證規(guī)則<----#---->點(diǎn)我

二.重要知識(shí)點(diǎn)

1.隨機(jī)數(shù)(PHP7)

random_bytes 函數(shù)返回 string 類型澈吨,并接受一個(gè) int 類型為參數(shù),該參數(shù)規(guī)定了所返回字符串的字節(jié)長(zhǎng)度
$bytes = random_bytes('10'); var_dump(bin2hex($bytes));//bin2hex() 函數(shù)把 ASCII 字符的字符串轉(zhuǎn)換為十六進(jìn)制值燥爷。字符串可通過(guò)使用 pack() 函數(shù)再轉(zhuǎn)換回去 //possible ouput: string(20) "7dfab0af960d359388e6"
random_int 函數(shù)返回給定范圍內(nèi)的整型數(shù)
var_dump(random_int(1, 100)); //possible output: 27

2.毫秒級(jí)時(shí)間戳

<?php
function getMillisecond() {
list($t1, $t2) = explode(' ', microtime());//microtime() 函數(shù)返回當(dāng)前 Unix 時(shí)間戳的微秒數(shù),explode() 函數(shù)把字符串打散為數(shù)組,list() 函數(shù)用于在一次操作中給一組變量賦值
return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);//sprintf() 函數(shù)把格式化的字符串寫入變量中,floatval ()獲取變量的浮點(diǎn)值,(float)獲取變量的浮點(diǎn)值
}

echo getMillisecond();

3.UUID(唯一識(shí)別碼)

http://www.reibang.com/p/792c2bbe107e

4.動(dòng)態(tài)獲取文件后綴

$ext = $file->getClientOriginalExtension();

5.文件類型表單驗(yàn)證

self::validate($request, [
            'img' => 'required|mimes:jpeg,bmp,png,gif,jpg',
            'photoName' => 'required|string|min:6|max:10'
        ]);

6.更換中文錯(cuò)誤提示信息

復(fù)制resources/lang/en/validation.php文件到自己新建的zh-cn目錄
然后替換其中的內(nèi)容https://laravel-china.org/articles/5840/validation-validation-in-laravel-returns-chinese-prompt

'attributes' => [
    'name'          => '名字',
    'age'           => '年齡',
    'img'           => '圖片',
    'photoName'     => '圖片名稱',
    'user_name' => '姓名',
    'pwd' => '密碼',
    'sex' => '性別',//添加自定義字段
    ],

7.Laravel時(shí)間區(qū)修改

在config/app.php修改該字段
'timezone' => 'PRC',//把原來(lái)的TRC改為PRC

8.自定義配置使用

在config下新建一個(gè)存放配置的PHP文件

<?php
return [
    'upload_dir' => public_path() . '/uploads',//上傳圖片的路徑
   ];

在頁(yè)面中調(diào)用:
config('sys.upload_dir')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜈亩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子前翎,更是在濱河造成了極大的恐慌稚配,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件港华,死亡現(xiàn)場(chǎng)離奇詭異道川,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門冒萄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)臊岸,“玉大人,你說(shuō)我怎么就攤上這事尊流∷Ы洌” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵崖技,是天一觀的道長(zhǎng)逻住。 經(jīng)常有香客問(wèn)我,道長(zhǎng)响疚,這世上最難降的妖魔是什么鄙信? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮忿晕,結(jié)果婚禮上装诡,老公的妹妹穿的比我還像新娘。我一直安慰自己践盼,他們只是感情好鸦采,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咕幻,像睡著了一般渔伯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肄程,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天锣吼,我揣著相機(jī)與錄音,去河邊找鬼蓝厌。 笑死玄叠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拓提。 我是一名探鬼主播读恃,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼代态!你這毒婦竟也來(lái)了寺惫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蹦疑,失蹤者是張志新(化名)和其女友劉穎西雀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歉摧,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒋搜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年篡撵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豆挽。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡育谬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帮哈,到底是詐尸還是另有隱情膛檀,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布娘侍,位于F島的核電站咖刃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏憾筏。R本人自食惡果不足惜嚎杨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氧腰。 院中可真熱鬧枫浙,春花似錦、人聲如沸古拴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)黄痪。三九已至紧帕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桅打,已是汗流浹背是嗜。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挺尾,地道東北人叠纷。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像潦嘶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崇众,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容