接下來咱們作刪除功能,能夠看到刪除按鈕提交到 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),刷新,能夠看到對應同窗消失,而且出現提示信息,仍是貼個圖片,我以爲這樣能反饋一些信息.瀏覽器
路由模型綁定後打印的數據: session
刪除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(); });