Я использую Алису в пакете Symfony 2 для загрузки приборов. Я пытаюсь настроить имя объекта, используя имя родительского объекта. В частности, у меня есть сущность, @Report1
, чья @Report1->name
возврат имущества Test Report 1
,
Я пытаюсь создать дочернюю сущность с именем Test Report 1 Scenario 1
, Вот мой фрагмент файла фикстуры:
AppBundle\Entity\Scenario:
Scenario1:
report_id: @Report1->id
name: @Report1->name 'Scenario 1'
Все, что я вернусь, это буквальное @Report1->name 'Scenario 1'
,
Если я удалю 'Scenario 1'
строка изname:
свойство, я получаю фактическое имя родительского отчета.
Я использую hautelook / alice-bundle 1.3.1 (nelmio / alice 2.2.0 и fzaninotto / faker 1.6.0) с php 5.6.
Вы можете настроить пользовательский поставщик данных с список аргументов переменной длины и использовать его в ваших файлах приборов.
В AppBundle / DataFixtures / ORM / DataLoader.php:
namespace AppBundle\DataFixtures\ORM;
use Hautelook\AliceBundle\Doctrine\DataFixtures\AbstractLoader;
class DataLoader extends AbstractLoader
{
/**
* {@inheritdoc}
*/
public function getFixtures()
{
return [
__DIR__.'/../Fixtures/user.yml',
];
}
public function concat(...$strings)
{
$result = '';
foreach ($strings as $string) {
$result .= $string;
}
return $result;
}
}
Теперь вы можете использовать пользовательский поставщик данных, как это.
В AppBundle / DataFixtures / Fixtures / user.yml:
AppBundle\Entity\User:
user-{1..10}:
firstname: <firstname()>
lastname: <lastname()>
email: <concat(@self->firstname, ".", @self->lastname, "@gmail.com")>
plainPassword: 123
username: <concat(@self->firstname, ".", @self->lastname)>
Это немного утомительно писать, но это работает.
А для версий php до php 5.6 вы можете использовать func_get_args()
чтобы получить список аргументов в DataLoader.php, например:
public function concat()
{
$result = '';
foreach (func_get_args() as $string) {
$result .= $string;
}
return $result;
}
Другой вариант, который работал для меня, использовал sprintf
:
App\Entity\User:
users{1..150}:
firstname: '<firstname()>'
lastname: '<lastname()>'
email: '<sprintf("%s.%[email protected]", @self->firstname, @self->lastname)>'