成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Laravel 5.4 入門(mén)系列 9. 注冊(cè)與登錄,用戶關(guān)聯(lián)

smallStone / 3674人閱讀

摘要:本節(jié)將實(shí)現(xiàn)文章評(píng)論與用戶關(guān)聯(lián)的功能。關(guān)系定義首先修改與表,增加字段增加全部回滾并重新執(zhí)行遷移添加用戶表與文章表評(píng)論表的一對(duì)多關(guān)系添加文章評(píng)論表與用戶表的多對(duì)一關(guān)系同時(shí),評(píng)論表的字段增加。同時(shí),我們還自定義了返回的錯(cuò)誤信息。

本節(jié)將實(shí)現(xiàn)文章、評(píng)論與用戶關(guān)聯(lián)的功能。

關(guān)系定義

首先修改 postscomments 表,增加 user_id 字段

/database/migrations/2017_04_12_124622_create_posts_table.php
/database/migrations/2017_04_15_062905_create_comments_table.php
public function up()
{
    Schema::create("posts", function (Blueprint $table) {
         
           // 增加
        $table->integer("user_id")->unsigned();
     
        $table->foreign("user_id")
              ->references("id")
              ->on("users")
              ->onDelete("cascade");
    });
}

全部回滾并重新執(zhí)行遷移:

$ php artisan migrate:refresh

添加用戶表與文章表、評(píng)論表的一對(duì)多關(guān)系:

/app/User.php
public function posts()
{
    return $this->hasMany(AppPost::class);
}

public function comments()
{
    return $this->hasMany(AppComment::class);
}

添加文章、評(píng)論表與用戶表的多對(duì)一關(guān)系:

/app/Comment.php
/app/Post.php
public function user()
{
    return $this->belongsTo(AppUser::class);
}

同時(shí),評(píng)論表的 $fillable 字段增加 user_id

注冊(cè)

首先,定義處理注冊(cè)相關(guān)業(yè)務(wù)的控制器:

$ php artisan make:controller RegistrationController

定義路由響應(yīng)注冊(cè)請(qǐng)求:

Route::get("/register","RegistrationController@create");

定義方法,返回注冊(cè)頁(yè)面視圖:

public function create()
{
    return view("registration.create");
}

創(chuàng)建注冊(cè)頁(yè)面:

/resources/views/registration/create.blade.php
@extends("layouts.master")

@section("content")
    
    
{{ csrf_field() }}
我們不會(huì)與別人分享您的郵箱
@endsection

定義路由響應(yīng)注冊(cè)提交:

Route::post("/register","RegistrationController@store");

定義方法處理注冊(cè)提交:

/app/Http/Controllers/RegistrationController.php
use AppUser;
public function store()
{    
    $this->validate(request(),[
        "name" => "required",
        "email" => "required|email",
        "password" => "required|confirmed",
    ]);

    $user = User::create(request(["name","password","email"]));

    auth()->login($user);

    return redirect()->home();
}

該方法包括了四部分:

驗(yàn)證字段,其中 password 使用了 confirmed 驗(yàn)證規(guī)則,會(huì)自動(dòng)去匹配 xxxxxx_confirmation 是否一致,因此之前的視圖要按照規(guī)范命名好。

創(chuàng)建用戶

登錄該用戶

返回名字為「home」的路由

其中,我們需要為路由命名,以匹配第四步:

Route::get("/posts","PostsController@index")->name("home");

雖然完成了注冊(cè)功能,但是我們保存密碼使用的明文,我們可以定義一個(gè)修改器,讓每次保存密碼時(shí)都自動(dòng)加密:

/app/User.php
public function setPasswordAttribute($password)
{
    $this->attributes["password"] = bcrypt($password);
}
登錄

創(chuàng)建控制器,處理用戶登錄業(yè)務(wù):

$ php artisan make:controller SessionsController

用戶訪問(wèn) /login 時(shí),路由分發(fā)該請(qǐng)求:

Route::get("/login","SessionsController@create");

create 方法返回用戶登錄頁(yè)面視圖:

/resources/views/sessions/create.blade.php
@extends("layouts.master")

@section("content")
    
    
{{ csrf_field() }}
@endsection

用戶點(diǎn)擊登錄后,路由分發(fā)該請(qǐng)求:

Route::post("/login","SessionsController@store");

最后是控制器對(duì)登錄行為進(jìn)行處理:

/app/Http/Controllers/SessionsController.php
public function store()
{    

    if (!auth()->attempt(request(["email", "password"]))) {
        return back()->withErrors([
            "messages" => "請(qǐng)確保郵箱和密碼正確!"
        ]);
    }

    return redirect()->home();
} 

我們使用了 Auth 類(lèi)提供的 attempt() 進(jìn)行驗(yàn)證,只需要傳入 emailpassword 即可,attempt 方法會(huì)對(duì)密碼經(jīng)過(guò)加密后與數(shù)據(jù)庫(kù)進(jìn)行比較,若匹配則
開(kāi)啟一個(gè)通過(guò)認(rèn)證的 session 給用戶。同時(shí),我們還自定義了返回的錯(cuò)誤信息。

登出

登出的實(shí)現(xiàn)比較簡(jiǎn)單,首先是路由:

Route::get("/logout","SessionsController@destroy");

控制器:

public function destroy()
{
    auth()->logout();

    return redirect()->home();
}

最后,我們優(yōu)化下導(dǎo)航讓?zhuān)钇涓鶕?jù)用戶登錄信息來(lái)顯示不同的設(shè)置項(xiàng):



注意,如果要讓下拉框生效,需要引入相關(guān)的 js


權(quán)限控制

實(shí)現(xiàn)了登錄與登出功能,就可以對(duì)用戶行為進(jìn)行權(quán)限控制了。

首先是文章的權(quán)限控制,對(duì)于「未登錄」的用戶,只可以閱讀文章,因此可以直接使用 Laravel 提供的中間件來(lái)實(shí)現(xiàn):

/app/Http/Controllers/PostsController.php
public function __construct()
{
    $this->middleware("auth")->except(["index","show"]);
}

意思是只有授權(quán)的用戶才能夠訪問(wèn)其他請(qǐng)求,除了 indexshow 外。

然后是用戶的權(quán)限控制:

/app/Http/Controllers/SessionsController.php
public function __construct()
{
    $this->middleware("guest")->except(["destroy"]);
}

意思是只有游客才能訪問(wèn)其他請(qǐng)求,除了 destroy。

完善文章與評(píng)論的創(chuàng)建

最后,完善文章與評(píng)論的創(chuàng)建功能,綁定用戶 id。首先是文章的創(chuàng)建:

/app/Http/Controllers/PostsController.php
public function store(Request $request)
{
    $this->validate(request(), [
        "title" => "required|unique:posts|max:255",
        "body" => "required|min:5",
    ]);

    $post = new Post(request(["title", "body"]));

    auth()->user()->publishPost($post);

    return redirect("posts");
}

創(chuàng)建文章直接使用關(guān)系模型:

/app/User.php
public function publishPost(Post $post)
{
    $this->posts()->save($post);
}

然后是評(píng)論的創(chuàng)建:

public function store(Post $post)
{    
    $this->validate(request(),[
        "body" => "required|min:5"
        ]);

    $post->addComment(new Comment([
        "user_id" => auth()->user()->id,
        "body"       => request("body"),

        ]));
    return back();
}

同樣使用關(guān)系模型:

/app/Post.php
public function addComment(Comment $comment)
{    
    $this->comments()->save($comment);
}

最后,是一些視圖的更新:

文章列表中,綁定作者:

/resources/views/posts/index.blade.php
 

具體文章與評(píng)論顯示時(shí),也綁定作者:

/resources/views/posts/show.blade.php

{{ $post->title }}

{{$post->body}}

@foreach ($post->comments as $comment)
{{$comment->created_at->diffForHumans() }}

{{ $comment->body }}

by {{$comment->user->name }}


@endforeach

Eloquent: 修改器 | Laravel 5.4 中文文檔

Laravel 的用戶認(rèn)證系統(tǒng) | Laravel 5.4 中文文檔

Navs · Bootstrap

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22766.html

相關(guān)文章

  • Laravel 5.4 入門(mén)系列 11. 通過(guò)郵件激活注冊(cè)用戶

    摘要:我們稍微封裝下代碼吧請(qǐng)您激活賬戶方法用于保存或更新字段方法用于判斷是否在小時(shí)之內(nèi)使用管理郵件在剛才的例子中,我們使用的是提供的方法來(lái)快速創(chuàng)建和發(fā)送郵件。 使用 Mailtrap 測(cè)試郵件功能 Mailtrap 提供了簡(jiǎn)單的測(cè)試郵件的服務(wù),步驟如下: 登錄網(wǎng)站 Mailtrap 注冊(cè)用戶 注冊(cè)成功之后,會(huì)自動(dòng)創(chuàng)建一個(gè) demo,點(diǎn)進(jìn)去之后就可以看到配置信息 showImg(https...

    dendoink 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 6. 文章的創(chuàng)建

    摘要:基本功能創(chuàng)建文章的第一步是用戶發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁(yè)面。實(shí)際上,會(huì)報(bào)錯(cuò)添加保護(hù)雖然我們完成了基本功能,但是提交請(qǐng)求的時(shí)候還是會(huì)報(bào)錯(cuò),其實(shí)這是防止攻擊。假如違反了規(guī)則,錯(cuò)誤信息會(huì)自動(dòng)被保存在閃存的中,即只對(duì)下一次請(qǐng)求生效。 基本功能 創(chuàng)建文章的第一步是用戶發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁(yè)面。 路由:處理用戶「創(chuàng)建文章」的請(qǐng)求 /routes/web.php Route::get(/po...

    levius 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 12. 使用請(qǐng)求類(lèi)進(jìn)行字段驗(yàn)證

    摘要:本節(jié)內(nèi)容比較簡(jiǎn)單,之前我們使用方法來(lái)進(jìn)行字段驗(yàn)證,這樣做有一個(gè)不好的地方就是,如果你要在很多地方使用同樣的驗(yàn)證,就需要重復(fù)編寫(xiě)代碼。因此,提供另外一種方式來(lái)進(jìn)行字段驗(yàn)證,即請(qǐng)求類(lèi)。 本節(jié)內(nèi)容比較簡(jiǎn)單,之前我們使用 validator 方法來(lái)進(jìn)行字段驗(yàn)證,這樣做有一個(gè)不好的地方就是,如果你要在很多地方使用同樣的驗(yàn)證,就需要重復(fù)編寫(xiě)代碼。因此,Laravel 提供另外一種方式來(lái)進(jìn)行字段驗(yàn)證...

    BearyChat 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 10.文章歸檔

    摘要:將上述的一系列查詢進(jìn)行封裝模型到了這一步,我們基本上實(shí)現(xiàn)了文章歸檔的功能。但是有一個(gè)問(wèn)題,文章歸檔實(shí)際上包括在通用視圖中,這就意味著,網(wǎng)站的所有請(qǐng)求都需要返回,否則就會(huì)報(bào)錯(cuò)。數(shù)據(jù)庫(kù)之?dāng)?shù)據(jù)庫(kù)請(qǐng)求構(gòu)建器中文文檔的視圖功能中文文檔 首先,要實(shí)現(xiàn)的是按照日期來(lái)統(tǒng)計(jì)文章,原始的 SQL 如下: select year(created_at) year, monthname(c...

    Nekron 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 8. 文章評(píng)論

    摘要:編輯遷移文件我們?yōu)楸砀裉砑恿送怄I,同時(shí)生定義了約束,該約束允許刪除父表文章的時(shí)候,自動(dòng)刪除關(guān)聯(lián)的子表評(píng)論。關(guān)聯(lián)中文文檔的輔助函數(shù)列表中文文檔 本節(jié)將學(xué)習(xí) Eloquent Relations,表與表之間存在著多種關(guān)系,舉例如下: 一對(duì)一:文章與作者 一對(duì)多:文章與評(píng)論 多對(duì)多:標(biāo)簽與文章 文章與評(píng)論的一對(duì)多關(guān)系 一對(duì)多關(guān)系,主要理解兩點(diǎn): 如何實(shí)現(xiàn)一對(duì)多關(guān)系 實(shí)現(xiàn)了之后能給開(kāi)發(fā)帶...

    IntMain 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<