How to fix in laravel 5.2 zizaco entrust:migration class name validation?
Asked Answered
A

4

12

I have followed zizac/entrust installation tutorial from GitHub Link and faced with error:

Class name must be a valid object or a string in var/www/html/laravel_test/vendor/zizaco/entrust/src/commands/MigrationCommand.php on line 86

MigrationCommand.php file url : Link

Outut:

php artisan entrust:migration

Tables: roles, role_user, permissions, permission_role
A migration that creates 'roles', 'role_user', 'permissions', 'permission_role' tables will be created in database/migrations directory

Proceed with the migration creation? [Yes|no] (yes/no) [yes]: yes

Creating migration...
PHP Fatal error:  Class name must be a valid object or a string in /var/www/html/laravel_test/vendor/zizaco/entrust/src/commands/MigrationCommand.php on line 86

the command: php artisan vendor:publish was successful.

File : config/entrust.php exist.

I didin't change any options to config/auth.php file same as - auth.php. How to fix it?

Arlberg answered 30/12, 2015 at 12:31 Comment(0)
R
40

in vendor/zizaco/entrust/src/commands/MigrationCommand.php on line 86

remove line :

    $usersTable  = Config::get('auth.table');
    $userModel   = Config::get('auth.model');

add line :

$usersTable  = Config::get('auth.providers.users.table');
$userModel   = Config::get('auth.providers.users.model');

and config/auth.php file write provider line as like me :

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

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

then your problem will solve : happy coding

Rode answered 5/1, 2016 at 16:1 Comment(6)
This solve the problem. I'm on Laravel 5.2 and using multi auth. This works like charm! ThanksShepp
Many thanks for your answer. It is working fine with laravel 5.2..This should be marked as right answer..:-)Rapping
@taposghosh, It gives the same error on role->delete() operation. Where else do I need change?Christinachristine
You should not edit direct vendor files as they will be overwritten in future updates. Instead you should add the correct lines to the config file until an update by Entrust updates their codebase to use the newer Laravel auth layout.Consuetudinary
you save me broCultivator
works in laravel 5.4.... following @BradBird. added in code config/auth.phpcode code /* * CONFIG FOR ENTRUST:MIGRATION * * */ 'table' => 'users', 'model' => App\Models\Usuario::class codeInterplay
C
5

In vendor/zizaco/entrust/src/commands/MigrationCommand.php on line 86.

Laravel 5.1.* Add Line

$usersTable  = Config::get('auth.table');
$userModel   = Config::get('auth.model');

Laravel 5.2.* Add Line

$usersTable  = Config::get('auth.providers.users.table');
$userModel   = Config::get('auth.providers.users.model');
Concentrate answered 30/4, 2016 at 13:40 Comment(1)
While this code may answer the question, it would be better to include some context, explaining how it works and when to use it. Code-only answers are not useful in the long run.Glennglenna
C
3

The accepted answer may fix the problem but it is very bad practice to edit direct vendor files. The following will fix the issue you may be having and will support your app still working if you decide to update Entrust and they fix their codebase.

Add the following lines to config/auth.php underneath:

/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/

Laravel 5.1 - 5.4

'model' => \App\Models\User::class,
'table' => 'users',

Once Entrust rolls out an update you can remove this or keep it. Up to you.

Consuetudinary answered 18/8, 2016 at 11:53 Comment(0)
S
2

Try running:

php artisan config:cache

to make sure your application is using fresh config files

EDIT

Ok, now I see, this library want to use:

  $usersTable  = Config::get('auth.table');
  $userModel   = Config::get('auth.model');

but there is no something like this in auth any more.

So as temporary workaround you should probaby add table and model to auth file like so: https://github.com/laravel/laravel/blob/5.1/config/auth.php

and wait until Entrust will be upgraded to remove this

Showpiece answered 30/12, 2015 at 12:37 Comment(2)
Thanks, still same problem. I think problem is with config/auth.php file.Arlberg
Could you show your User.php file? It should be in App namespaceConceptualize

© 2022 - 2024 — McMap. All rights reserved.