In laravel 5 descrivo i modelli senza specificare i campi nella classe del modello. Alcune magie identificano quali campi esistono nel database per questo modello.
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model {}
Quando descrivo la migrazione per la tabella del modello, specificherò il tipo di campo, la lunghezza e così via. Queste informazioni esistono solo nella mia testa e nel database.
Quando devo convalidare i dati, devo specificare nuovamente i requisiti.
Cosa voglio - descrivere tutti i requisiti per tutti i campi in un unico posto. Mi piace così:
class MyModel extends Model {
public $form_fields = [
'email' => ['required', 'email', 'human_name' => 'E-mail', 'input_type' => 'text'],
'age' => ['required', 'positive_integer', 'range:18,90', 'input_type' => 'text'],
'first_name' => ['string', 'human_name' => 'Your first name', 'input_type' => 'text'],
'agreement' => ['required', 'human_name'
];
}
Perché ho bisogno di questo?
In questo modo voglio assicurarmi che tutte le regole per tutti i modelli vengano scritte in un unico posto.
In seguito voglio prendere queste regole in convalida
$this->validate($request, MyModel::$form_fields);
e nei modelli
{{ show_field(MyModel::$form_fields['email']) }}
{{ show_field(MyModel::$form_fields['age']) }}
{{ show_field(MyModel::$form_fields['first_name']) }}
show_field è una funzione globale che accetta "human_name" e "input_type" e genera codice html con tutte le regole di convalida richieste. Potrebbe esserci qualche funzione o classe con la funzionalità richiesta?
Come posso ottenere questo?