2016-11-23 65 views
2

我有這樣的代碼在Laravel 5.2來檢查,如果一個給定的db表名($什麼)都有自己的型號:檢查一類是在Laravel模型5

public function manage($what) { 

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

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

的問題是,is_subclass_of總是當模型存在並且它是Model的子類時也會失敗。我想這是一個名稱空間問題,我該如何解決它?

回答

1

您可能需要完整的命名空間。當我在我的某個型號上做get_parent_class()時,它會返回Illuminate\Database\Eloquent\Model。所以用這個代替:

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

請更新您的答案,並在$ model中添加命名空間,如下所示: '$ model ='App \\'。 Str :: studly(Str :: singular($ what));' – g4b0

+0

爲什麼你需要兩個斜槓App \\? –

5

您可以檢查,如果你的對象是一個模型與instanceof一個實例:

$article = new \App\Article(); 

if ($article instanceof \Illuminate\Database\Eloquent\Model) { 
+0

它不起作用,因爲$ model是一個帶有類名的字符串,不是一個對象。它來自'Str :: studly(Str :: singular($ what))' – g4b0

+0

@ g4b0你從對象中創建字符串?如果是這樣,請使用該對象而不是字符串。 –

+0

不,我從db表名 – g4b0