Chamar classe abstrata com call_user_func
Bom dia,
gostaria de uma ajuda para solucionar um problema.
Estou criando um esquema de rotas parecido com o do laravel:
Route::get('url','Controller@metodo')
Porém me esbarrei em um detalhe.
Tenho uma classe abstrata que estende outra classe com métodos.
//classe abstrata
abstract class Request extends FormRequest{
}
//classe extendida
class FormRequest{
public function all()
{
return 'teste';
}
}
Como os parâmetros da rota são dinâmicos, criei uma função para pega-los:
if(class_exists($controller)){
if(method_exists($controller,$method)){
$class = new ReflectionClass($controller);
$metodo = $class->getMethod($method)->getParameters();
$typehint = explode('\\',$metodo[0]->getClass()->name); // App\Request
$typehint = $typehint[1]; // Request
call_user_func([new $controller,$method], $typehint); // Chamo a classe Aluno e o metodo
E no controller está assim:
class Aluno
{
protected $aluno;
public function checaAluno(\App\Request $request)
{
echo $request->all();
}
public function __get($key){
print_r($key);
}
}
Defini o typehint do método com o método abstrato Request.
Porém recebo o erro:
Argument 1 passed to Aluno::checaAluno() must be an instance of App\Request, string given
Ou seja, o type hint está como sendo chamado como string.
O laravel funciona de maneira semelhante, porém não consegui fazer essa parte para chamar um método abstrato no typeint. Sendo que não podemos chamar uma classe abstrata.
Poderiam me dar um help por favor.
Obrigado.Discussão (3)
Carregando comentários...