如何将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()>