I'm new to symfony 4 and tried to write my own function for yml nelmio/alice, but after I ran bin/console doctrine:fixtures:load
, I got this error:
In DeepCopy.php line 177:
The class "ReflectionClass" is not cloneable.
Here is my fixtures.yml file:
App\Entity\Post:
post_{1..10}:
title: <customFunction()>
Here is my AppFixture.php file:
<?php
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Nelmio\Alice\Loader\NativeLoader;
class AppFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$loader = new NativeLoader();
$objectSet = $loader->loadFile(__DIR__.'/Fixtures.yml',
[
'providers' => [$this]
]
)->getObjects();
foreach($objectSet as $object) {
$manager->persist($object);
}
$manager->flush();
}
public function customFunction() {
// Some Calculations
return 'Yep! I have got my bonus';
}
}
After investigating about nelmio/alice new version, I found the solution:
We should first create a provider which is a class that contains our new custom functions. Second, extend the
NativeLoader
class to register our new provider. Third, use our new NativeLoader (Here is CustomNativeLoader) which allows us to use our new formatters.Here is the provider in CustomFixtureProvider.php:
As a side note, the
title
function generates some dummy titles for your articles or posts or etc. which have dynamic length between 20..100 character. This function use Faker Alice built-in formatters.Here is CustomNativeLoader.php:
Here is LoadFixture.php:
And finally an example for using our new
title
formatter:I know this is a long way for writing a small function but according to my investigation, it's a standard way for extending the formatters in new version.