改变Laravel 5.2的工厂路径

问题描述 投票:1回答:2

我正在尝试将我的工厂目录更改为自定义路径,所以我正在使用这个,就像我在laracasts thread中看到的那样:

use Illuminate\Database\Eloquent\Factory as Factory;

class FactoryServiceProvider extends ServiceProvider
{
    public function register()
    {
            $this->app->singleton(Factory::class, function () {
                return Factory::construct(new Faker\Generator, app_path() .'/Core/Database/Factories');
            });
    }
}

新路径有效,我的工厂文件在新目录中被加载。但是现在,当我尝试使用php artisan migrate:refresh --seed上的播种机的工厂时,我得到了

[InvalidArgumentException]未知格式化程序“名称”

来自工厂定义中的$ faker实例:

$factory->define(User::class, function (Faker\Generator $faker) {
    return[
        'name' => $faker->name,
        'email' => $faker->freeEmail,
        'password' => bcrypt($faker->word),
        'remember_token' => str_random(10)
    ];
});

所有格式化程序都会出现此错误,而不仅仅是名称。

问题出在哪儿?在我改变路径之前工厂工作正常。

php instance laravel-5.2 factories
2个回答
4
投票

我暂时找不到答案,所以也许这会对某人有所帮助。

在您的服务提供商中,加载工厂的其他路径。这样,Laravel不仅可以在默认文件夹中查找工厂,还可以在自定义文件夹中查找工厂。

use Illuminate\Database\Eloquent\Factory;
...
  public function boot() {
    $this->registerEloquentFactoriesFrom(__DIR__ . '/../Database/Factories');
}


protected function registerEloquentFactoriesFrom($path) {
    $this->app->make(Factory::class)->load($path);
}

__DIR__是您的提供者所在目录的路径。我的目录结构如下所示。

src
 |    
 +-- Providers
 |  |  
 |  +-- CustomServiceProvider.php
 |    
 +-- Database
 |  |  
 |  +-- Factories

当然,不同的方法也适用于它。

发现于https://github.com/caffeinated/modules/issues/337


1
投票

好的,最后我找到了如何使它工作:

<?php

use Faker\Generator as FakerGenerator;
use Illuminate\Database\Eloquent\Factory as EloquentFactory;
use Illuminate\Support\ServiceProvider;

class FactoryServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton(EloquentFactory::class, function ($app){
            $faker = $app->make(FakerGenerator::class);
            $factories_path = 'Your/Custom/Path/To/Factories';
            return EloquentFactory::construct($faker, $factories_path);
        });
    }
}

app->make的诀窍是:

$ APP->使(FakerGenerator ::类)

© www.soinside.com 2019 - 2024. All rights reserved.