【问题标题】:Laravel 4: Model Class not foundLaravel 4:找不到模型类
【发布时间】:2017-02-09 05:38:24
【问题描述】:

当我尝试在控制器类方法中使用 User 类时,我收到了 Class 'App\Models\User' not found 错误。我到处寻找,尝试了一切都没有运气!这是我尝试过的:

  1. 检查该类是否存在并且在正确的路径中(它适用于其他任何地方)
  2. use App\Models\User; 添加到控制器文件的顶部并使用User
  3. 试过了:new \App\Models\User
  4. 运行:composer dump-autoload
  5. 运行:php artisan dump-autoload
  6. 运行:php artisan clear-compiled

当我执行dd(class_exists('App\Models\User')) 时,我得到\vendor\laravel\framework\src\Illuminate\Support\helpers.php:513:boolean false,这确认该类确实由于某种原因无法访问。

有什么想法吗?

编辑

您会发现与此类似但又不相同的问题。请仔细阅读问题。我没有说控制器类丢失了。我说无法从特定控制器类内部访问模型类(用户)。并且模型类在其他任何地方都可以使用。

编辑:代码摘录

<?php

use App\Models\User;
use App\Models\Role;
use App\Models\Advert;
use App\Models\AdvertPhoto;
use App\Models\AdvertMetum;
use App\Models\AdvertMetaDatum;
use App\Models\AdvertMetaCategory;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Request;

class AdvertsController extends BaseController {

  /**
     * Show the form for creating a new resource.
     * GET /adverts/create
     *
     */
    public function create()
    {
      // New user instance
      // dd(class_exists('\App\Models\User')); // Outputs FALSE
      $userx = new User; // Throws an Exception

      return View::make('adverts.create');

    }




}

【问题讨论】:

  • 不,它不是重复的。请仔细阅读问题。我没有说控制器类丢失了。我说无法从特定控制器类内部访问模型类(用户)。并且模型类适用于其他任何地方。
  • 实际上你说的“在控制器类中”并不意味着“一个特定的控制器类”更不用说“模型类在其他任何地方都有效”。也就是说,您可能应该发布该特定控制器的代码(至少命名空间、用途和它不起作用的方法),因为它可能与该控制器上的某些代码有关。
  • 我添加了一个精简版的控制器类。谢谢。
  • 你不是缺少命名空间吗?那么其他的类呢,比如RoleAdvert,你能不能创建这些类的对象还是只是User类?

标签: php laravel-4


【解决方案1】:

我自己设法解决了这个问题。事实证明,你必须告诉 Laravel 什么类和表将用于身份验证(也就是你的“用户”类)。我不知道这一点(加上这是一个继承的项目)。显然User 类是在根命名空间(即\User)中定义的,Laravel 被配置为查找\User。但有时我在代码中看到\App\Models\User,它给我的印象是User 与其他模型在同一个命名空间下,因为它们都在app/models/ 文件夹中。我已通过更改在config/auth.php 中纠正了此问题:

'model' => 'User'

到:

'model' => App\Models\User::class

并在app/models/user.php 的顶部添加命名空间:

namespace App\Models;

最后我在config/app.php 中设置了一个别名,如下所示:

'User' => 'App\Models\User'

这样我一直使用User::blah 的地方都不会中断(迫使我在任何地方添加use App\Models\User;!)

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2012-12-13
    • 2018-02-03
    • 2015-08-11
    相关资源
    最近更新 更多