Объединить свойство объекта со строкой в ​​hautelook / AliceBundle

Я использую Алису в пакете 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: свойство, я получаю фактическое имя родительского отчета.

3

Решение

Я использую 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;
}
6

Другие решения

Другой вариант, который работал для меня, использовал sprintf:

App\Entity\User:
users{1..150}:
firstname: '<firstname()>'
lastname: '<lastname()>'
email: '<sprintf("%s.%[email protected]", @self->firstname, @self->lastname)>'
0

По вопросам рекламы [email protected]