2016-11-23 6 views
2

У меня есть этот код в Laravel 5.2, который проверяет, является ли имя, присвоенной таблицы БД ($ что) имеет свою собственную модель:Проверьте классом является моделью в 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 всегда fail, также, когда модель существует, и это подкласс модели. Я полагаю, что это проблема пространства имен, как я могу ее исправить?

ответ

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

Нет, я создаю sting из таблицы db name – g4b0