CRUD, , , , . , , URI CRUD. , :
example.com/user/{id?}
example.com/user/create
example.com/user/edit/10
example.com/user/save
example.com/user/save/10
example.com/user/delete/10
user - , , , example.com/product/create , , , :
Route::get('/{model}/{id?}', 'CrudController@read');
Route::get('/{model}/create', 'CrudController@create');
Route::get('/{model}/edit/{id}', 'CrudController@edit');
Route::post('/{model}/save/{id?}', 'CrudController@save');
Route::post('/{model}/delete/{id}', 'CrudController@delete');
app\Providers\RouteServiceProvider.php boot :
public function boot(Router $router)
{
$model = null;
$router->bind('model', function($modelName) use (&$model, &$router)
{
$model = app('\App\User\\'.ucfirst($modelName));
if($model)
{
if($id = $router->input('id'))
{
$model = $model->find($id);
}
return $model ?: abort(404);
}
});
parent::boot($router);
}
CrudController, :
class CrudController extends Controller
{
protected $request = null;
public function __construct(Request $request)
{
$this->request = $request;
}
public function read($model)
{
return $model->exists ? $model : $model->all();
}
public function createOrEdit($model)
{
$classNameArray = explode('\\', get_class($model));
$className = strtolower(array_pop($classNameArray));
$view = view($className . '.form');
$view->formAction = "$className/save";
if(is_object($model) && $model->exists)
{
$view->model = $model;
$view->formAction .= "/{$model->id}";
}
return $view;
}
public function save($model)
{
return $this->model->fill($this->request)->save();
}
public function delete($model)
{
return $this->model->delete();
}
}
, - , :
<form action="{{url($formAction)}}" method="POST">
<input
type="text"
class="form-control"
name="first_name" value="{{old('first_name', @$model->first_name)}}"
/>
<input type="Submit" value="Submit" />
{!!csrf_field()!!}
</form>
, , , / , views/user/form.blade.php views/product/form.blade.php ..
, , . , , , .