Laravel 5.6 - Имя класса должно быть допустимым объектом или строкой - PullRequest
0 голосов
/ 30 августа 2018

Мое приложение 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

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Как отмечают @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 значений, чтобы проверить, правильно ли они определены в рабочей среде.

0 голосов
/ 30 августа 2018

Похоже, что вы используете разрешение Spatie / Laravel, и если ваше приложение работает на сервере разработки, я полагаю, что версия php на вашем живом сервере меньше 7.0, что требуется для этого пакета.

Вы должны проверить свою рабочую версию php, используя phpinfo (); на файл и указывая ваш браузер на этот файл, это покажет, какая версия php используется вашим веб-сервером. Например: вы можете записать файл info.php со следующим содержанием

<?php
phpinfo();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...