2016-07-07 31 views

risposta

9

Si dovrebbe usare php artisan per generare il provider personalizzato ...

Nella riga di comando, passare alla radice della vostra applicazione e tipo ...

php artisan make:provider FakerServiceProvider 

Questo dovrebbe generare un nuovo fornitore nella cartella app/Providers. Ecco come appare la mia funzione di registro come l'esempio dei documenti falsi.

/** 
* Register the application services. 
* 
* @return void 
*/ 
public function register() 
{ 
    $this->app->singleton('Faker', function($app) { 
     $faker = \Faker\Factory::create(); 
     $newClass = new class($faker) extends \Faker\Provider\Base { 
      public function title($nbWords = 5) 
      { 
       $sentence = $this->generator->sentence($nbWords); 
       return substr($sentence, 0, strlen($sentence) - 1); 
      } 
     }; 

     $faker->addProvider($newClass); 
     return $faker; 
    }); 
} 

Sto utilizzando una classe anonima qui. Se hai php < 7, probabilmente dovrai creare un nuovo file con la tua nuova classe di provider e inoltrarlo. Assicurati di aggiungere questo nuovo provider all'array providers in app/config.php.

Ora che è registrato, si può afferrare la nuova classe faker usando la seguente ...

$faker = app('Faker'); 
echo $faker->title; 

Inoltre, se si passa attraverso i documenti a https://laravel.com/docs/5.2/facades si dovrebbe anche essere in grado di fare una facciata piuttosto Faker facilmente. Tutto il lavoro pesante è fatto, devi solo creare la nuova classe di facciata, avere getFacadeAccessor restituire 'Faker' e aggiungerlo all'array facades in app/config.php.

Poi si può semplicemente utilizzare in questo modo ...

echo Faker::title; 
+0

avevo '$ fabbrica> define (App \ User :: classe, la funzione (Faker \ Generator $ falsario) {...' nelle fabbriche, quindi ho cambiato il nome vincolante in 'Faker \ Generator'. –

+0

@ x-yuri Potresti essere più preciso su ciò che hai fatto? Ho un requisito simile per il mio progetto –

+0

@ rap-2 -h Da quello che posso vedi, probabilmente intendevo, che il codice nella risposta si lega alla classe 'Faker' (' $ this-> app-> singleton ('Faker' ... '). Ma dato che avevo' Faker \ Generator' in 'database/factories', probabilmente mi sono legato a 'Faker \ Generator' per utilizzare formattatori extra (' title' in questo caso). –