如何将faker数据结果传递给自定义函数
我正在使用PhoneNumberBundle验证我的应用程序上的电话号码。我也使用NelmioAliceBundle连同AliceFixtureBundle。以此为起点,我正在为一个具有用于验证电话号码的PhoneNumberBundle
断言的实体编写夹具。下面是该文件的一个片段:如何将faker数据结果传递给自定义函数
/**
* @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] Notice: Use of undefined constant phoneNumber - assumed 'phoneNumber' in /var/www/html/vendor/nelmio/alice/src/Nelmio/Alice/Loader/Base.php(630) : eval()'d code line 1
所以我传递值以错误的方式,可以在任何给我一些这方面的帮助?或者,也许给我另一个想法如何实现这一目标?
(落户在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'))>
作为替代方案,您可以在实例化Nelmio/Alice/Fixtures/Loader类时传递Faker Provider对象作为第二个参数。
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()>