Как передать результат данных фейера в пользовательскую функцию

я использую PhoneNumberBundle для проверки номера телефона в моем заявлении. Я использую также NelmioAliceBundle вместе с AliceFixtureBundle. Имея это в качестве отправной точки, я пишу приспособление для объекта, который имеет PhoneNumberBundle утверждать для подтверждения номера телефона. Вот фрагмент этого файла:

/**
* @AssertPhoneNumber(defaultRegion="VE")
* @ORM\Column(name="phone", type="phone_number", length=11)
*/
protected $phone;

Я не знаю, как использовать внешние библиотеки на самом приборе, поэтому единственное решение, которое я вижу, это написать собственный фейкер и вернуть телефон с хорошо отформатированным номером и вернуться к нему. Тогда я сделал это:

TananeFakerProvider.php

class TananeFakerProvider {

public function formatPhoneNumber($fakePhoneNumber)
{
return $this->container->get('libphonenumber.phone_number_util')->parse($fakePhoneNumber);
}

}

services.yml

services:
tanane.faker.provider:
class: CommonBundle\Tools\TananeFakerProvider
arguments: ["@service_container"]
tags:
-  { name: h4cc_alice_fixtures.provider }

И наконец Orders.yml (приспособление):

FrontendBundle\Entity\Orders:
Orders{1..50}:
nickname: <text(15)>
# trying to pass the fake number back to the custom faker
phone: <formatPhoneNumber(phoneNumber())>
email: <companyEmail()>
fiscal_address: <address()>
shipping_address: <address()>
shipping_from: <randomElement(array('MRW','DOMESA', 'ZOOM'))>
payment_type: @PaymentType*
order_amount: <randomFloat(2)>
bank: @Bank*
transaction: <randomNumber()>
comments: <sentence(15)>
secure: <boolean(35)>
person: <randomElement(array(@Natural*, @Legal*))>
status: @OrderStatus*

Но я получил эту ошибку:

[Symfony \ Component \ Debug \ Exception \ ContextErrorException] Примечание:
Использование неопределенной константы phoneNumber — предполагается, что «phoneNumber» в
/var/www/html/vendor/nelmio/alice/src/Nelmio/Alice/Loader/Base.php(630)
: eval () ‘d строка кода 1

Так что я передаю значение неверным образом, кто-нибудь может мне помочь в этом? Или, может быть, дать мне другую идею, как этого добиться?

2

Решение

(Устанавливается на github, но для потомков здесь есть копия)

Вы можете использовать следующее в Алисе 1.x:

FrontendBundle\Entity\Orders:
Orders{1..50}:
nickname: <text(15)>
# trying to pass the fake number back to the custom faker
phone: <formatPhoneNumber($this->fake('phoneNumber'))>

И это в строке 2.x:

FrontendBundle\Entity\Orders:
Orders{1..50}:
nickname: <text(15)>
# trying to pass the fake number back to the custom faker
phone: <formatPhoneNumber($fake('phoneNumber'))>
4

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

В качестве альтернативы вы можете передать объект Faker Provider в качестве второго параметра при создании экземпляра класса Nelmio / Alice / Fixtures / Loader.

1.- Создать класс провайдера

class MyCustomFakeProvider
{
public function tell_me_something()
{
return 'something';
}
}

2.-

use Nelmio\Alice\Fixtures\Loader;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;

class ExampleDataLoader extends AbstractFixture implements OrderedFixtureInterface
{
public function loadMyDataFixtures() {

$myCustomFakeProvider = new MyCustomFakeProvider();
$loader = new Loader('es_ES', $myCustomFakeProvider);
$objects = $loader->load(__DIR__ . '/example.yml');

$persister = new \Nelmio\Alice\Persister\Doctrine($manager);
$persister->persist($objects);

3.- Наконец, создайте файл example.yml (на том же уровне, что и класс Loader в этом случае) с некоторыми данными и пользовательским вызовом tell_me_something ()

AppBundle\Entity\Example:
examples_1{1..101}:
title: <tell_me_something()> # MY CUSTOM METHOD
description: <sentence()>
3

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