2016-01-08 1 views
1

Я недавно обновил приложение Laravel 5.1 до 5.2. Это работало нормально, но с момента обновления у меня возникла проблема. При попытке удалить один из моих моделей, я получаю следующее исключение:Исключение при попытке удалить модель в laravel 5.2

FatalErrorException in Model.php line 1011: 
Class name must be a valid object or a string 

URL, я нахожусь на:

/admin/roles/delete/4 

Маршрут для него является:

Route::get('admin/roles/delete/{id}', ['as' => 'admin.roles.delete', 'uses' => 'Admin\[email protected]']); 

код контроллера:

public function destroy($id) 
{ 
    $role = Role::find($id); 
    $role->delete(); 

    Session::flash('message', '<div class="alert alert-success" role="alert">The role has been deleted.</div>'); 

    return redirect(route('admin.roles')); 
} 

Режим л код:

<?php namespace App; 

use Zizaco\Entrust\EntrustRole; 

class Role extends EntrustRole 
{ 
    protected $fillable = ['name', 'display_name', 'description']; 
} 

Это, вероятно, стоит упомянуть, я использую Entrust пакет. Это содержимое моего файла конфигурации Доверьте:

<?php 

/** 
* This file is part of Entrust, 
* a role & permission management solution for Laravel. 
* 
* @license MIT 
* @package Zizaco\Entrust 
*/ 

return [ 

    /* 
    |-------------------------------------------------------------------------- 
    | Entrust Role Model 
    |-------------------------------------------------------------------------- 
    | 
    | This is the Role model used by Entrust to create correct relations. Update 
    | the role if it is in a different namespace. 
    | 
    */ 
    'role' => 'App\Role', 

    /* 
    |-------------------------------------------------------------------------- 
    | Entrust Roles Table 
    |-------------------------------------------------------------------------- 
    | 
    | This is the roles table used by Entrust to save roles to the database. 
    | 
    */ 
    'roles_table' => 'roles', 

    /* 
    |-------------------------------------------------------------------------- 
    | Entrust Permission Model 
    |-------------------------------------------------------------------------- 
    | 
    | This is the Permission model used by Entrust to create correct relations. 
    | Update the permission if it is in a different namespace. 
    | 
    */ 
    'permission' => 'App\Permission', 

    /* 
    |-------------------------------------------------------------------------- 
    | Entrust Permissions Table 
    |-------------------------------------------------------------------------- 
    | 
    | This is the permissions table used by Entrust to save permissions to the 
    | database. 
    | 
    */ 
    'permissions_table' => 'permissions', 

    /* 
    |-------------------------------------------------------------------------- 
    | Entrust permission_role Table 
    |-------------------------------------------------------------------------- 
    | 
    | This is the permission_role table used by Entrust to save relationship 
    | between permissions and roles to the database. 
    | 
    */ 
    'permission_role_table' => 'permission_role', 

    /* 
    |-------------------------------------------------------------------------- 
    | Entrust role_user Table 
    |-------------------------------------------------------------------------- 
    | 
    | This is the role_user table used by Entrust to save assigned roles to the 
    | database. 
    | 
    */ 
    'role_user_table' => 'role_user', 

]; 

ответ

0

Похоже, вы, возможно, не ваша конфигурация Доверьте настроена правильно.

method_exists() вызова на событии удаления записей в EntrustRoleTrait будет бросать это исключение, когда вы пытаетесь удалить роль и возвращенную строку из Config::get() вызова не является допустимым класс или объект.

https://github.com/Zizaco/entrust/blob/master/src/Entrust/Traits/EntrustRoleTrait.php#L75

Проверьте конфигурацию и убедитесь, что вы установили название модели правильно.

+0

Я обновил этот вопрос, чтобы показать свой конфигурационный файл. Похоже, все названо правильно. – geoffs3310

+0

Ваша конфигурация кэширована? Убедитесь, что вы очистили его, выполнив команду 'php artisan config: clear' –

+0

Yep попробовал это, но по-прежнему получал ту же ошибку – geoffs3310

4

После обновления до 5.2 изменить конфигурации/auth.php

'providers' => [ 
     'users' => [ 
      'driver' => 'eloquent', 
      'model' => App\Models\User::class, 
     ], 
     // 'users' => [ 
     //  'driver' => 'database', 
     //  'table' => 'users', 
     // ], 
    ], 

https://github.com/Zizaco/entrust/blob/master/src/Entrust/Traits/EntrustRoleTrait.php#L48

попробовать заменить Entrust/Traits/EntrustRoleTrait.php Config :: получить ('auth.model') на Config :: получить ('') auth.providers.users.model