php - 在 Laravel 5.2 中更改工厂路径

标签 php instance laravel-5.2 factories

我正在尝试将我的工厂目录更改为自定义路径,因此我正在使用它,正如我在 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] Unknown formatter "name"



来自工厂定义中的 $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)
    ];
});

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

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

最佳答案

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

在您的服务提供商中,加载到您的工厂的其他路径。
这样 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

关于php - 在 Laravel 5.2 中更改工厂路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376220/

相关文章:

php - 如何在 laravel 5.2 中验证电话号码?

PHP/JavaScript 隐藏信息

php - 通过 websockets 发送 popen 的输出

php - 正则表达式从字符串中删除所有单个字符

python - 从元类设置实例变量

php - Laravel 5.2 : Do something after user has logged in?

php - MySQL - 选择性删除重复记录

c++ - OpenGL 实例渲染比 glBegin/glEnd 慢

amazon-ec2 - Amazon EC2 实例 ID - 为什么要 XOR?

laravel - 如何获取当年的所有记录?