检查类是否是Laravel 5中的模型

g4b*_*4b0 3 php laravel laravel-5.2

我在Laravel 5.2中有这个代码,它检查给定的db表名($ what)是否有自己的Model:

public function manage($what) {

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

    /* [... other stuff ...] */
}
Run Code Online (Sandbox Code Playgroud)

问题是is_subclass_of总是失败,当模型存在并且它是Model的子类时也是如此.我想这是命名空间问题,我该如何解决?

Ale*_*nin 12

您可以检查您的对象是否是模型的实例instanceof:

$article = new \App\Article();

if ($article instanceof \Illuminate\Database\Eloquent\Model) {
Run Code Online (Sandbox Code Playgroud)


ayn*_*ber 6

您可能需要完整的命名空间。当我get_parent_class()对我的一个模型进行操作时,它返回Illuminate\Database\Eloquent\Model. 所以改用这个:

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