Downloads
Stars
Version
Build resources & api controllers in fast, easy and fully customizable way.
composer require bashirsh/laravel_easy_controller
to create new API Controller we need to extend the class ApiController
,
app/Http/Controllers/Api/UsersController.php
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
}
This class will create a full resource controller with the methods:
then we need to add the resource to the routes.
routes/api.php
...
Route::apiResource('users', 'UsersController');
...
to create new controller we need to extend the class CrudController
app/Http/Controllers/UsersController.php
use bashirsh\laravel_easy_controller\CrudController;
class UsersController extends CrudController {
protected $viewPath = 'admin.users';
protected $model = '\App\Models\User';
protected $resource = 'admin.users';
}
This class will create a full resource controller with the methods:
then we need to add the resource to the routes, and create view files.
routes/web.php
...
Route::resource('users', 'UsersController');
Route::get('users_excel', 'UsersController@excel');
...
create 4 files in views
resources/views/admin/users/index.blade.php
the controller will pass the variable $data
which contain the result of Model::paginate()
resources/views/admin/users/show.blade.php
the controller will pass the variable $item
, which contain the result of Model::find($id)
resources/views/admin/users/create.blade.php we can print validation errors
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
resources/views/admin/users/edit.blade.php
the controller will pass the variable $item
, which contain the result of Model::find($id)
The package contain a lot of hooks which help you to customize any thing in the controllers, you can see them here: Hooks.
The package will handle pagination limit and filter out of the box, and we can change the query ex: adding conditions or using eager load.
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
function indexQueryHook($query){
$query->where('user_type', 'admin');
return $query;
}
}
we define our allowed filters by defining.
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
public function filter_fields(){
return [
[
// field equal to name by default
// and the default condition is '='
'name'=>'id'
],
[
'name'=>'name',
'field'=>'name',
'cond'=>'like'
]
];
}
}
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
public function index_transformer($item){
$item->new_value = 'test';
$item->other_value = 'test 2';
return $item;
}
}
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
public function add_rules(){
return [
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required',
];
}
public function edit_rules($item){
return [
'name' => 'required',
'email' => [
'required',
Rule::unique('users')->ignore($item->id),
],
];
}
}
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
protected function prepare_data_to_add($data)
{
$data->created_by = Auth::ID();
return $data;
}
protected function prepare_data_to_update($data)
{
$data->updated_by = Auth::ID();
return $data;
}
}
you can define redirect_url to redirect after save, update or delete
and you can customize using these methods
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
/**
* $item: the affected object
*/
protected function redirect_url($item)
{
return route('users.index');
}
protected function add_redirect_url($item)
{
return route('users.show', [$item->id]);
}
protected function edit_redirect_url($item)
{
return route('users.show', [$item->id]);
}
protected function destroy_redirect_url($item)
{
return route('users.index');
}
}
use bashirsh\laravel_easy_controller\ApiController;
class UsersController extends ApiController {
protected $model = '\App\Models\User';
// used for both save and update
protected function afterSaveHook($item, $request)
{
// do whatever you want
}
protected function afterUpdateHook($item, $request)
{
// do whatever you want
}
protected function afterStoreHook($item, $request)
{
// do whatever you want
}
}