Level 12
Please, tell me more ?
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
Please, tell me more ?
I have done something like this and i came to this solution:
abstract class AbstractApiCrudController extends Controller
{
protected function __store($request)
{
//logic to store here
}
}
and in the child controller class:
class BrandController extends AbstractApiCrudController
{
public function store(BrandRequest $request)
{
return parent::__store($request);
}
}
Hope this can help.
class AbstractAAA extends BaseController
{
public $storeRequest = "\App\Http\Request\Admin\StoreRequest";
public $updateRequest = "\App\Http\Request\Admin\UpdateRequest";
public function __construct()
{
parent::__construct();
\App::bind('\App\Http\Requests\Admin\A ', $this->storeRequest);
}
public function store(A $request) {
}
}
class XXXXController extends AbstractAAA
{
public $storeRequest = "\App\Http\Requests\Admin\XXXX";
public function __construct()
{
parent::__construct();
}
}
If anyone reads this, please write your thoughts!
Because I didn't like any of the answers found on the web for this particular problem, I ended up with this:
CrudController.php
abstract class CrudController extends Controller implements CrudInterface
{
/**
* Name of the resource, in lowercase plural form.
* (e.g. User -> users)
*
* @var string
*/
protected $resource;
/**
* Model instance.
*
* @var Model
*/
private $instance;
/**
* Set an instance of the model.
*
* @return void
*/
function __construct()
{
$this->resource = str_plural(strtolower(class_basename(static::$model)));
$this->instance = new static::$model;
// @todo Find out if this is good practice?
// Contextual binding did not work in Service Providers...
app()->bind(Request::class, function ($app) {
return $app->make(static::$requestClass);
});
}
// ...
/**
* Store a newly created resource in database.
*
* @param Request
* @return void
*/
public function store(Request $request)
{
$this->instance->create($request->all());
return redirect()->route($this->resource.'.index');
}
UserController.php
class UserController extends CrudController
{
/**
* Name of the Model and From Request classes.
*
* @var string
*/
protected static $model = User::class;
protected static $requestClass = UserRequest::class;
}
UserRequest.php
class UserRequest extends Request
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$route = $this->route()->getName();
if ($route === 'users.store') return [
'username' => 'required|alpha_dash|unique:users,username',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed'
];
if ($route === 'users.update') return [
'username' => 'required|alpha_dash|unique:users,username,' . $this->user->id,
'email' => 'required|email|unique:users,email,' . $this->user->id,
'password' => 'confirmed'
];
return [];
}
}
Please or to participate in this conversation.