2015-02-25 5 views
1

Я пытаюсь использовать привязку модели маршрута, но есть проблемы.Laravel 5 Route Model Binding не работает

RouteServiceProvider.php

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

    $router->model('categories', 'App\Category'); 
} 

Route.php

Route::get('categories/trash', ['as' => 'admin.categories.trash', 'uses' => '[email protected]']); 
Route::get('categories/{categories}/restore', ['as' => 'admin.categories.restore', 'uses' => '[email protected]']); 
Route::get('categories/{categories}/delete', ['as' => 'admin.categories.delete', 'uses' => '[email protected]']); 
Route::resource('categories', 'CategoriesController'); 

CategoriesController.php

public function restore(Category $category) 
{ 
    $category->restore(); 
    return redirect()->back(); 
} 

public function delete(Category $category) 
{ 
    $category->forceDelete(); 
    return redirect()->back(); 
} 

Посмотреть

<a href="{!! URL::route('admin.categories.restore', $category->id) !!}">Restore</a> 
<a href="{!! URL::route('admin.categories.delete', $category->id) !!}">Delete Permanently</a> 

Но когда я попытался restoredelete или я получил вопрос о NotFoundHttpException

enter image description here

+0

Я предполагаю, что категория с идентификатором 16 на самом деле существует в вашей базе данных? –

+0

Да, в базе данных есть данные. http://prntscr.com/69lcsf –

+0

Эта строка была удалена. Насколько я знаю, вы не можете использовать стандартную привязку модели для получения удаленных строк. Если вы хотите сделать это, вам придется использовать '$ router-> bind ('App \ Category', function ($ category) {})' вместо этого, где в закрытии использовался метод Eloquent 'withTrashed'. Я полагаю, что вышеупомянутое предполагает, что ваша модель использует «SoftDeletes», и столбец 'deleted_at' фактически используется. –

ответ

2

скриншот в комментариях указывает на то, что вы используете SoftDeletes.

Следующий код привязки модели не учитывает удаленные строки.

$router->model('categories', 'App\Category'); 

Для того, чтобы достичь этого вам нужно использовать bind вместо model

$router->bind('categories', function($value) 
{ 
    return App\Category::withTrashed()->where('id', $value)->first(); 
} 

Что будет включать в себя удаленные строки. Вам нужно будет использовать это для вашего маршрута восстановления, например.

Смежные вопросы