wellington.alves 0 Denunciar post Postado Junho 23, 2017 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. Compartilhar este post Link para o post Compartilhar em outros sites
rockrgo 138 Denunciar post Postado Junho 23, 2017 Cara não sei se vai funcionar, mas da forma que está fazendo você está passando uma string mesmo. Tenta algo do tipo. call_user_func([new $controller,$method], $typehint::class); Ou $metodo = $class->getMethod($method)->getParameters(); call_user_func([new $controller,$method], $metodo[0]->getClass()); Compartilhar este post Link para o post Compartilhar em outros sites
wellington.alves 0 Denunciar post Postado Junho 23, 2017 1 hora atrás, rockrgo disse: Cara não sei se vai funcionar, mas da forma que está fazendo você está passando uma string mesmo. Tenta algo do tipo. call_user_func([new $controller,$method], $typehint::class); Ou $metodo = $class->getMethod($method)->getParameters(); call_user_func([new $controller,$method], $metodo[0]->getClass()); Infelizmente não deu, mesmo erro :/ Compartilhar este post Link para o post Compartilhar em outros sites
wellington.alves 0 Denunciar post Postado Junho 23, 2017 Descobri o motivo. Como eu estava tendo como base o laravel, no arquivos onde chamava a classe Request estava apontando para a classe abstrata do request e não para a classe concreta. use App\Http\Requests\Request //apontava para esta, que é abstrata use Illuminate\Http\Request //está é a correta Tendo em vista isso, somente removi o abstract da classe. Pois realmente ela não deve ser. Obrigado a todos. Compartilhar este post Link para o post Compartilhar em outros sites