在 Laravel 5.2 中更改工厂路径
Change factories path in Laravel 5.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] 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)
];
});
所有格式化程序都会出现此错误,而不仅仅是名称。
问题出在哪里?在我改变路径之前,工厂工作正常。
好吧,我终于找到了如何让它工作:
<?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->make(FakerGenerator::class)
我有一段时间找不到答案,所以也许这会对某人有所帮助。
在您的服务提供商中,加载到您的工厂的附加路径。
这样 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
当然,不同的方法也适用。
我正在尝试将我的工厂目录更改为自定义路径,所以我正在使用它,正如我在 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)
];
});
所有格式化程序都会出现此错误,而不仅仅是名称。
问题出在哪里?在我改变路径之前,工厂工作正常。
好吧,我终于找到了如何让它工作:
<?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->make(FakerGenerator::class)
我有一段时间找不到答案,所以也许这会对某人有所帮助。
在您的服务提供商中,加载到您的工厂的附加路径。 这样 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
当然,不同的方法也适用。