Laravel5學生成績管理系統-06-資源控制器刪除學生

接下來咱們作刪除功能,能夠看到刪除按鈕提交到 http://localhost:8000/admin/2010300005, form表單裏面有個值爲DELETE的隱藏輸入域,告訴路由,這個請求對應這資源控制器的 destory 方法,咱們來完成。 view頁面刪除操做:php

<td>
   <button class="btn btn-sm btn-info" data-toggle="modal" data-target="#myModal{{$user->id}}">更新分數</button>
   <form action="{{ url('admin/'.$user->id) }}" style='display: inline' method="post">
      <input type="hidden" name="_method" value="DELETE">
      <input type="hidden" name="_token" value="{{csrf_token()}}">
      <button class="btn btn-sm btn-danger" onclick="return confirm('肯定刪除?')">刪除 </button>
   </form>
</td>

控制器resource的destroy操做:laravel

public function destroy(UsersInfo $user)
    {
        $name = $user->name;
        dd($user);
        $user->delete();
        session()->flash('message', $name."同窗已經被移除");
        return Redirect::back();
    }

輸入圖片說明

看到參數 UsersInfo $user, 可是,打印沒有獲取到數據的詳細信息。那麼,爲何不是id,你必定會這樣想.咱們打開 App/Http/Provider/RouteServiceProvider.php,修改boot方法,這裏咱們能夠查閱官方文檔路由模型綁定路由-路由模型綁定數據庫

<?php

namespace App\Providers;

use Illuminate\Routing\Router;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function boot(Router $router)
    {
        parent::boot($router);

        // 1.路由模型綁定[2016-05-21 Add]
        $router->bind('admin',function($id){
            return \App\UsersInfo::findOrFail($id);
        });

       // 2.路由模型綁定[2016-05-21 Add]
       // $router->model('admin', 'App\UsersInfo');
    }
}

添加以上兩個方法後,均可以獲取用戶的信息,上面兩種寫法都行,看我的喜愛.上面寫法比較直觀,相信你如今也知道了destory方法參數爲何能夠那樣寫了,你能夠在destory中dd($user);在瀏覽器中點擊刪除,肯定刪除,就能夠看到頁面中輸出對應的user信息,下面,去掉destory中dd($user),刷新,能夠看到對應同窗消失,而且出現提示信息,仍是貼個圖片,我以爲這樣能反饋一些信息.瀏覽器

路由模型綁定後打印的數據: tusession

刪除OK。閉包

##路由模型綁定詳解app

Laravel 路由模型綁定提供了一個方便的方式來注入類實例到你的路由中。例如,除了注入一個用戶的 ID,你也能夠注入與指定 ID 相符的完整 User 類實例。ide

首先,使用路由的 model 方法爲指定參數指定類。必須在 RouteServiceProvider::boot 方法中定義你的模型綁定: ###綁定參數至模型post

public function boot(Router $router)
{
    parent::boot($router);

    $router->model('user', 'App\User');
}

接着,定義包含 {user} 參數的路由:url

$router->get('profile/{user}', function(App\User $user) {
    //
});

由於咱們已經綁定 {user} 參數至 App\User 模型,因此 User 實例會被注入至該路由。因此,舉個例子,一個至 profile/1 的請求會注入 ID 爲 1 的 User 實例。

**注意:**若是符合的模型不存在於數據庫中,就會自動拋出一個 404 異常。

若是你但願指定你本身的「不存在」行爲,只需傳遞一個閉包做爲 model 方法的第三個參數:

$router->model('user', 'App\User', function() {
    throw new NotFoundHttpException;
});

若是你但願使用你本身的解析邏輯,那麼你必須使用 Route::bind 方法。你傳遞至 bind 方法的閉包會獲取 URI 的部分值,且會返回你想注入至路由的類實例:

$router->bind('user', function($value) {
    return App\User::where('name', $value)->first();
});
相關文章
相關標籤/搜索