首页 > 解决方案 > Laravel 5.6 - 类名必须是有效的对象或字符串

问题描述

我的 Laravel 应用程序抛出下一个错误:

(1/1) Error

Class name must be a valid object or a string
in HasRelationships.php line 656

我不得不说,现在这个项目是在一个共享主机中,但这是唯一根本不起作用的部分。这是 HTML 文件:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-10">
            <div class="card">
                <div class="card-header text-uppercase text-center"><b>Dashboard administrativo</b></div>
                <div class="card-body">

                  <div class="card mb-3">
                    <div class="card-header">
                      <button type="button" class="btn btn-sm btn-primary text-uppercase" style="cursor:default;">Filtrar por</button>
                      <a class="btn btn-sm btn-secondary text-uppercase" role="button" href="/admin/dashboard/?gender=true">Hombre</a>
                      <a class="btn btn-sm btn-secondary text-uppercase" role="button" href="/admin/dashboard/?gender=false">Mujer</a>
                      <button type="button" class="btn btn-sm btn-primary text-uppercase" style="cursor:default;">Ordenar de manera</button>
                      <a class="btn btn-sm btn-secondary text-uppercase" role="button" href="{{ route('admin.dashboard', ['gender' => request('gender'), 'sort' => 'desc']) }}">Ascendente</a>
                      <a class="btn btn-sm btn-secondary text-uppercase" role="button" href="{{ route('admin.dashboard', ['gender' => request('gender'), 'sort' => 'asc']) }}">Descendente</a>
                      <a class="btn btn-sm btn-success text-uppercase" role="button" href="{{ route('admin.dashboard') }}">Reiniciar</a>
                    </div>
                  </div>
                  <div class="card">
                    <div class="card-header text-uppercase text-center">Usuarios registrados en el sistema</div>
                    <div class="card-body">
                      <table class="table table-bordered">
                        <thead>
                          <tr>
                            <th class="text-center">#</th>
                            <th>Nombre</th>
                            <th>Correo</th>
                            <th>Opciones</th>
                          </tr>
                        </thead>
                        <tbody>
                          @foreach ($users as $user)
                            <tr>
                              <td class="text-center">{{ $user->id }}</td>
                              <td>{{ $user->name }}</td>
                              <td>{{ $user->email }}</td>
                              <td>
                                <div class="btn-group fullwidth" role="group">
                                  <a href="{{ route('user.show', $user->id) }}" class="btn btn-primary" role="button">Ver</a>
                                  <a href="{{ route('user.edit', $user->id) }}" class="btn btn-success" role="button">Editar</a>
                                </div>
                              </td>
                            </tr>
                          @endforeach
                        </tbody>
                      </table>
                      {{ $users->links() }}
                    </div>
                  </div>

                </div>
            </div>
        </div>
    </div>
</div>
@endsection

这是我的控制器:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Auth;

use App\Role;
use App\Permission;
use App\User;
use App\Share;

class AdminController extends Controller
{
    public function dashboard()
    {

      $users = new User();
      $queries = [];

      $columns = [
          'gender',
      ];

      foreach ($columns as $column) {

          if(request()->has($column)) {
              $users = $users->where($column, request($column));
              $queries[$column] = request($column);
          } // if

      } // foreach

      if(request()->has('sort')) {
          $users = $users->orderBy('name', request('sort'));
          $queries['sort'] = request('sort');
      } // if

      $users = $users->paginate(10)->appends($queries);

      return view('admin.dashboard', compact('users'));

    } // dashboard
}

为什么我的代码在我的机器上开发时可以完美运行,但在托管时却不能?我在网上寻找解决方案,但我得到的一切都与Entrust我根本没有使用的有关。任何想法?

编辑:App\User

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use Notifiable, HasRoles;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'gender', 'identification', 'phone', 'country', 'city', 'provider', 'provider_id', 'birthday', 'referred_by', 'affiliate_id',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function shares()
    {
      return $this->hasMany('App\Share');
    }

    public function storeProvider()
    {
      return $this->hasOne('App\Provider');
    }

    public function messages()
    {
      return $this->hasMany('App\Message');
    }
}

这是整个错误:

 (1/1) Error

Class name must be a valid object or a string
in HasRelationships.php line 656
at Model->newRelatedInstance(null)in HasRelationships.php line 479
at Model->morphToMany(null, 'model', null, null, 'role_id')in HasRoles.php line 47
at User->roles()in HasAttributes.php line 411
at Model->getRelationshipFromMethod('roles')in HasAttributes.php line 397
at Model->getRelationValue('roles')in HasAttributes.php line 327
at Model->getAttribute('roles')in Model.php line 1475
at Model->__get('roles')in HasRoles.php line 158
at User->hasRole('administrador')in HasRoles.php line 167
at User->hasRole(array('administrador'))in HasRoles.php line 187
at User->hasAnyRole(array('administrador'))in RoleMiddleware.php line 21
at RoleMiddleware->handle(object(Request), object(Closure), 'administrador')in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in CheckInformation.php line 36
at CheckInformation->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in SubstituteBindings.php line 41
at SubstituteBindings->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in Authenticate.php line 43
at Authenticate->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in VerifyCsrfToken.php line 68
at VerifyCsrfToken->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in StartSession.php line 63
at StartSession->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in EncryptCookies.php line 66
at EncryptCookies->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in Pipeline.php line 104
at Pipeline->then(object(Closure))in Router.php line 667
at Router->runRouteWithinStack(object(Route), object(Request))in Router.php line 642
at Router->runRoute(object(Request), object(Route))in Router.php line 608
at Router->dispatchToRoute(object(Request))in Router.php line 597
at Router->dispatch(object(Request))in Kernel.php line 176
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))in Pipeline.php line 30
at Pipeline->Illuminate\Routing\{closure}(object(Request))in TrustProxies.php line 57
at TrustProxies->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in TransformsRequest.php line 31
at TransformsRequest->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in TransformsRequest.php line 31
at TransformsRequest->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in CheckForMaintenanceMode.php line 62
at CheckForMaintenanceMode->handle(object(Request), object(Closure))in Pipeline.php line 151
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request))in Pipeline.php line 104
at Pipeline->then(object(Closure))in Kernel.php line 151
at Kernel->sendRequestThroughRouter(object(Request))in Kernel.php line 116
at Kernel->handle(object(Request))in index.php line 55

标签: laravel

解决方案


正如@erubiel 和@farid-silva 所指出的,您可能需要解决生产环境中的PHP 版本。

但是,最接近的问题是Spatie\Permission\Traits\HasRoles::roles调用Illuminate\Database\Eloquent\Concerns\HasRelationships::morphToMany

  • related
  • table, 和
  • foreignKeyPivot

全部设置为null

如果你看一下代码,这些值来自 Laravel 配置,即:

  • permission.models.role
  • permission.table_names.model_has_roles, 和
  • permission.column_names.model_morph_key

所以可能值得检查您的配置,即permission值集,以检查这些是否在生产中正确定义。


推荐阅读