Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Faker;
4
 
5
class Factory
6
{
7
    public const DEFAULT_LOCALE = 'en_US';
8
 
9
    protected static $defaultProviders = ['Address', 'Barcode', 'Biased', 'Color', 'Company', 'DateTime', 'File', 'HtmlLorem', 'Image', 'Internet', 'Lorem', 'Medical', 'Miscellaneous', 'Payment', 'Person', 'PhoneNumber', 'Text', 'UserAgent', 'Uuid'];
10
 
11
    /**
12
     * Create a new generator
13
     *
14
     * @param string $locale
15
     *
16
     * @return Generator
17
     */
18
    public static function create($locale = self::DEFAULT_LOCALE)
19
    {
20
        $generator = new Generator();
21
 
22
        foreach (static::$defaultProviders as $provider) {
23
            $providerClassName = self::getProviderClassname($provider, $locale);
24
            $generator->addProvider(new $providerClassName($generator));
25
        }
26
 
27
        return $generator;
28
    }
29
 
30
    /**
31
     * @param string $provider
32
     * @param string $locale
33
     *
34
     * @return string
35
     */
36
    protected static function getProviderClassname($provider, $locale = '')
37
    {
38
        if ($providerClass = self::findProviderClassname($provider, $locale)) {
39
            return $providerClass;
40
        }
41
        // fallback to default locale
42
        if ($providerClass = self::findProviderClassname($provider, static::DEFAULT_LOCALE)) {
43
            return $providerClass;
44
        }
45
        // fallback to no locale
46
        if ($providerClass = self::findProviderClassname($provider)) {
47
            return $providerClass;
48
        }
49
 
50
        throw new \InvalidArgumentException(sprintf('Unable to find provider "%s" with locale "%s"', $provider, $locale));
51
    }
52
 
53
    /**
54
     * @param string $provider
55
     * @param string $locale
56
     *
57
     * @return string|null
58
     */
59
    protected static function findProviderClassname($provider, $locale = '')
60
    {
61
        $providerClass = 'Faker\\' . ($locale ? sprintf('Provider\%s\%s', $locale, $provider) : sprintf('Provider\%s', $provider));
62
 
63
        if (class_exists($providerClass, true)) {
64
            return $providerClass;
65
        }
66
 
67
        return null;
68
    }
69
}