Verificare se esiste un campo in Ingresso durante la convalida utilizzando Laravel

Voglio fare in modo che alcuni campi sono pubblicati come parte del modulo, ma I don;t importa se alcuni sono valori vuoti.

La ‘richiesta’ regola di convalida non funziona come io sono lieti di accettare le stringhe vuote. Ho provato il seguito, ma come il ‘2’ il campo è mai inviato, il validatore non processo.

Tutte le idee?

$rules = array(
     'address2' => 'attribute_exists'
);



class CustomValidator extends Illuminate\Validation\Validator {

    public function validateAttributeExists($attribute, $value, $parameters)
    {
        return isset($this->data[$attribute]);
    }
}
  • che cosa sono esattamente cercando di fare? si deve controllare che il isset nel tuo codice personalizzato, piuttosto si potrebbe avere utilizzato richiesto?
  • Non si dispone di uno specifico insieme di valori che “indirizzo2”, devono corrispondere? Ci sono un sacco di regole di convalida che vengono con Laravel e per qualcosa di semplice come address2, non sono sicuro che avresti bisogno di una validazione personalizzata.
  • Mi dispiace, ma non hanno spiegato a me stesso correttamente. Non è attualmente possibile utilizzare qualsiasi esistente regola di convalida per verificare che il $_POST[attributo] esiste, ma consentire una stringa vuota come il suo valore. Voglio accettare stringhe vuote, ma controlla che la variabile “indirizzo2” è la richiesta post. Il mio tentativo di sopra per creare una regola di convalida non sembra funzionare. Io, ovviamente, poteva solo controllare per vedere se è isset nel codice, ma sto cercando di mantenere le cose pulite con le regole di convalida prima di eseguire qualsiasi altra logica.
InformationsquelleAutor eski009 | 2013-07-03



5 Replies
  1. 3

    Si dovrebbe fare custom validator come questo.

    use Symfony\Component\Translation\TranslatorInterface;
    
    class CustomValidator extends Illuminate\Validation\Validator {
    
        public function __construct(TranslatorInterface $translator, $data, $rules, $messages = array())
        {
            parent::__construct($translator, $data, $rules, $messages);
    
            $this->implicitRules[] = 'AttributeExists';
        }
    
        public function validateAttributeExists($attribute, $value, $parameters)
        {
            return isset($this->data[$attribute]);
        }
    }

    Questo renderà AttributeExists di lavoro, senza utilizzo di bisogno. Per ulteriori spiegazioni su questo. Quando si desidera creare un nuovo validatore regola. Se non si imposta in $implicitRules, che il metodo non funziona se non si utilizza necessitano di regola di prima. Potete trovare maggiori informazioni in laravel codice sorgente.

    • Fantastico, grazie 🙂
  2. 15

    È possibile utilizzare Input::has('address2') per controllare se qualcosa è inviato da indirizzo2 input name. Vedere l’esempio:

    if(Input::has('address2')) {
        //Do something!
    }
  3. 2

    Quando si invia un modulo ogni campo è pubblicato, infatti, è se si lascia qualche presentato vuota quindi che il valore del campo è null o vuoto. Basta controllare i parametri POST una volta, per farlo, aprire la console di firebug di firefox e inviare il modulo, quindi controllare il post parametri. Come si desidera accettare stringa vuota che cosa è l’uso di qualsiasi regola?

    altro Si può fare questo

    $addr2=Input::get('address2');
    if(isset($addr2)){
     //do here whatever you want
    }else{
     //do something else
     $addr2='';//empty string
    }
    • Hi Rahul, Che non è tecnicamente corretto. Un utente può rimuovere manualmente in un campo da un post di richiesta di modifica di il DOM. Sono meno preoccupato, ma desidera che questo per essere utilizzato come parte di una API. Se il campo non viene inviato, voglio convalida. Se la stringa viene inviata, ma è vuoto, dovrebbe passare.
    • è necessario eseguire questa operazione manualmente, come quello che vi ho detto sopra, isset($addr2) restituisce false se il suo vuoto o non inviati.
    • Che è una vergogna come vorrei idealmente desidera utilizzare Laravel di convalida.
    • Laravel Convalida sta lavorando bene, Ma io non credo che ci sia qualsiasi convalida disponibili o per rendere sicuro che è necessario ancora vuoto…
  4. 2

    In realtà, Laravel è un metodo per verificare se un attributo esistente, anche se non si è riempito.

    $rules = [
       'something' => 'present'
    ];

    Tutte le regole di convalida sono memorizzati in classe Validator (/vendor/laravel/framework/src/Illuminate/Validation/Validator.php), si può verificare l’attuazione di ogni regola, anche non documentate regole.

    • Si può aggiungere il riferimento? ad eccezione di: a volte la regola di convalida.
    • Aggiunto riferimento.

Lascia un commento