【问题标题】:It's possible limit some string formatters on fzaninotto Faker可能会限制 fzaninotto Faker 上的某些字符串格式化程序
【发布时间】:2016-09-08 04:36:47
【问题描述】:

我正在使用这个库,但遇到了一个我未能解决的问题。

我喜欢一些大小有限制的字段,例如用户名(Faker\Provider\Internet)。我认为这个字段使用 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));
    }

为了与我的程序一起使用,我想创建一个 fork。在这个 fork 上修改代码

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));
    }

我认为有一个最好的方法。

【问题讨论】:

    标签: php laravel-5 faker


    【解决方案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 方法一起使用。您只需提供一个返回 bool 的函数,该函数决定生成的值是否有效,否则生成另一个值,依此类推。因此,您不必在提供程序函数中执行此操作。

    首先是验证器:

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

    那么你可以这样使用它:

    $faker = new Faker\Generator();
    $faker->addProvider(new UserNick($faker));
    
    $name = $faker->valid($max15)->userNick;
    

    总结:
    你不需要 fork Faker 就能得到你想要的,只需要写你自己的 Provider。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      相关资源
      最近更新 更多