2016-05-12 80 views
1

我正在使用这个库,并且遇到了一个我没有解决的问题。这可能限制fzaninotto上的一些字符串格式化器Faker

我喜欢限制大小的一些字段,例如userName(Faker \ Provider \ Internet)。我认为ot不是好主意使用字符串与255这个领域,并像限制到15.

在我的表的种子生成一些崩溃后,我读代码。

protected static $userNameFormats = array(
     '{{lastName}}.{{firstName}}', 
     '{{firstName}}.{{lastName}}', 
     '{{firstName}}##', 
     '?{{lastName}}', 
    ); 
public function userName() 
    { 
     $format = static::randomElement(static::$userNameFormats); 
     $username = static::bothify($this->generator->parse($format)); 

     return strtolower(static::transliterate($username)); 
    } 

用于我的程序,我认为创建一个分叉。在这个分支修改代码

protected static $userNickFormats = array(
     '{{firstName}}', 
     '{{firstName}}#', 
     '{{firstName}}##', 
     '{{firstName}}###', 
     '?{{lastName}}##', 
    ); 


public function userNick($limit = 15) 
    { 
     $format = static::randomElement(static::$userNickFormats); 
     $username = static::bothify($this->generator->parse($format)); 
     while (strlen($username) > $limit) { 
      $username = static::bothify($this->generator->parse($format)); 
     } 

     return strtolower(static::transliterate($username)); 
    } 

我认为这是一个最好的方法。

回答

1

我不确定Faker的分叉是最简单的方法。

考虑只创建自己的Provider类并将其添加到faker。 见the documentation

在你的情况下,它可能会是这个样子(代码从文档复制招摇):

userNickProvider.php

<?php 

class UserNick extends \Faker\Provider\Base 
{ 
    protected static $userNickFormats = array(
     '{{firstName}}', 
     '{{firstName}}#', 
     '{{firstName}}##', 
     '{{firstName}}###', 
     '?{{lastName}}##', 
    ); 


    public function userNick() 
    { 
     $format = static::randomElement(static::$userNickFormats); 
     $username = static::bothify($this->generator->parse($format)); 

     return strtolower(static::transliterate($username)); 
    }  
} 

至于你所需要的限制,有一个叫做修改valid()您可以使用任何faker方法。你只需提供一个函数返回一个布尔值,判断生成的值是否是有效值,否则就会生成另一个值等等。所以你不必在你的提供者函数中这样做。

首先验证:

$max15 = function($string) { 
    return mb_strlen($string) <= 15; 
}; 

然后你可以使用它像这样:

$faker = new Faker\Generator(); 
$faker->addProvider(new UserNick($faker)); 

$name = $faker->valid($max15)->userNick; 

总结:
您不必到餐桌法克尔得到你想要什么,只是编写你自己的提供者。