如何将变量传递给Laravel验证器规则

时间:2016-08-26 10:07:34

标签: php validation laravel

问题

考虑一下:

def getTotalPrice (sizeOfferPrices){

    def strTravelersAssociated
    def floatImporteViaje = 0
    String [] arrTravelersAssociated
    def offerAmountTemp

        //recorremos los precios que se nos ha devuelto en la oferta
        for(i=0; i<=sizeOfferPrices-1; i++){
            //obtenemos el precio
            offerAmountTemp = responseAsSlurper.Body.FlightPriceRS.PricedFlightOffers.PricedFlightOffer.OfferPrice[i].RequestedDate.PriceDetail.TotalAmount.SimpleCurrencyPrice
            offerAmountTemp = offerAmountTemp.toFloat();

            //obtenemos los datos de los viajeros asociados , casteamos a string y splitamos para obtener array
            strTravelersAssociated = responseAsSlurper.Body.FlightPriceRS.PricedFlightOffers.PricedFlightOffer.OfferPrice[i].RequestedDate.Associations.AssociatedTraveler.TravelerReferences
            strTravelersAssociated = strTravelersAssociated.toString();
            arrTravelersAssociated = strTravelersAssociated.tokenize(" ");

            //obtenemos el numero de viajeros por oferta
            intTravelersByOffer = arrTravelersAssociated.size().toInteger();

            //realizamos la multiplicaciónd viajeros por su oferta asociada
            floatImporteViajeTemp = (offerAmountTemp * intTravelersByOffer).round(2);
            floatImporteViaje =  floatImporteViaje + floatImporteViajeTemp;
        }
        //obtenemos el precio total
        amount = floatImporteViaje.round(2);
        return amount
}

在上面的示例中,protected $rules = array( 'mobile_number' => 'phone:AUTO,mobile,:country_code' ); 的值需要根据在验证发生之前定义的变量进行更改。

考虑到这一点,是否可以将变量传递给Laravel验证规则?

请记住,这就是我调用验证的方式:

country_code

2 个答案:

答案 0 :(得分:0)

您可以创建自定义验证规则。

看起来像这样:

Validator::extend('country_code', function($attribute, $value, $parameters, $validator) {
        if ($value === 'US') {
            return false;
        }
        return true;
    });

然后就这样使用它:

    protected $rules = array(
    'mobile_number' => 'phone:AUTO,mobile|country_code'
);

重新阅读你的信息后,我意识到你的意思有点不同。但是看一下$parameters参数。 并阅读文档。它很好地覆盖了https://laravel.com/docs/5.3/validation#custom-validation-rules

答案 1 :(得分:0)

使用这种新方法,如果你扩展了一个新规则并且你有一个想要传递给闭包的变量,你可以这样做:

  Validator::extend(nameOfTheRule, function ($attribute, $value, $parameters, $validator) use ($priorVariable) {
  //code

}