php - 方法 'loadFactoriesFrom' 已弃用

标签 php laravel

我最近升级到 Laravel 8 但现在我收到警告

Method 'loadFactoriesFrom' is deprecated

我的文件结构如下

myapp/
├── packages/
│   ├── package-1/
|   |   |── src/
|   |   |   |── databases/
|   |   |   |   |── factories
|   |   |   |   |   |── PackageModel11
|   |   |   |   |   |── PackageModel12
|   |   |   |   |── Package1ServiceProvider
|   |   |   |   └── migrations
|   |   |   |── models/
|   |   |   |── controllers/
|   |   |   |── migrations/
|   |   |   └── /
|   |   |── tests/
|   |   |── composer.json/
│   ├── app
│   ├── database/
│   ├── resources/
│   └── public/

为了加载我的自定义包,我使用了各种函数

<?php

namespace MyName\Package1;

use Illuminate\Support\ServiceProvider;

class Package1ServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->loadFactoriesFrom(['database/factories']);
        $this->loadRoutesFrom(__DIR__.'/routes.php');
        $this->loadMigrationsFrom(__DIR__.'/migrations');
        $this->loadViewsFrom(__DIR__.'/views', '');
        $this->publishes([
            __DIR__.'/views' => base_path('resources/views'),
        ]);
    }

    public function register()
    {
        // Register controllers Here 
    }
}

既然 loadFactoriesFrom 已弃用,我该如何加载这些工厂?

更新

我在这里找到了如何做 connect models and Factories并且他们记录覆盖 newFactory() 函数。

所以我的测试中有以下内容

  public function testWithPermissionUserCanSaveNewOnlineAssessment()
  {
    $topic = ELearningTopic::factory()->create();
    $this->actingAs($this->user, 'api')
      ->post('api/e-learning/course-content/topics/.' . $topic->id . './online-assessments', [])
      ->assertStatus(401);
  }

我的工厂

class ELearningTopicFactory extends Factory
{
  public function definition()
  {
     return [
       'name' => 'Some name'
     ];
  }
}

还有我的模特

  use HasFactory;
  protected static function newFactory()
  {
    return ELearningTopicFactory::new();
  }

现在我得到下面的错误

Class 'App\ELearningTopic' not found

我可能会遗漏什么?为什么不覆盖模型类

最佳答案

Laravel 8 改变了工厂的工作方式。

无论如何,如果你想在 laravel 8 中使用旧工厂风格,只需安装 laravel legacy-factories

这个包为 Laravel 8.x+ 提供了对上一代 Laravel 工厂(<= 7.x)的支持。

有关此问题的更多详细信息,请参阅 github link .

关于php - 方法 'loadFactoriesFrom' 已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66867068/

相关文章:

javascript - 无法使用 ckeditor $_POST

php - 在加载时向 Laravel/Eloquent 模型添加自定义属性?

php - 在 header 中发送 token 时,Laravel TokenMismatch 异常

php - 通过 Nginx Vs 部署 Laravel 站点。 PHP artisan 服务

php - Javascript 端 RequestHandler

php - 设置用户输入域的自定义域

php - 使用 Symfony 和 Doctrine 创建小页面来显示表格的内容

php - 如何在 magento 主页中添加 Facebook 点赞或分享按钮

php - 如何在 phpunit 测试运行时禁用在控制台上显示应用程序日志消息?

php - 无法通过 eloquent 向数据库表提供数据