g4b0 g4b0 - 14 days ago 4
PHP Question

Check if a class is a Model in Laravel 5

I have this code in Laravel 5.2 that checks if a given db table name ($what) has its own Model :

public function manage($what) {

$model = Str::studly(Str::singular($what));
if (!is_subclass_of($model, 'Model')) {
\App::abort(404);
}

/* [... other stuff ...] */
}


The problem is that is_subclass_of always fail, also when the model exist and it's a subclass of Model. I suppose it's a namespace problem, how can I fix it?

Answer

You may need the full namespace. When I do get_parent_class() on one of my models, it returns Illuminate\Database\Eloquent\Model. So use this instead:

$model = 'App\\' . Str::studly(Str::singular($what));
if (!is_subclass_of($model, 'Illuminate\Database\Eloquent\Model')) {