लारवेल सत्यापन गुण "अच्छे नाम"


82

मैं एक उचित पठन नाम (उदाहरण: first_name> पहला नाम) के लिए: विशेषता नाम (इनपुट नाम) को बदलने के लिए "भाषा> {भाषा}> वैधीकरण। Php" में सत्यापन विशेषताओं का उपयोग करने की कोशिश कर रहा हूं। यह उपयोग करने के लिए बहुत सरल लगता है, लेकिन सत्यापनकर्ता "अच्छा नाम" नहीं दिखाता है।

मेरे पास यह है:

'attributes' => array(
    'first_name' => 'voornaam'
  , 'first name' => 'voornaam'
  , 'firstname'  => 'voornaam'
);

त्रुटियों को दिखाने के लिए:

@if($errors->has())
  <ul>
  @foreach ($errors->all() as $error)
    <li class="help-inline errorColor">{{ $error }}</li>
  @endforeach
  </ul>
@endif

और नियंत्रक में मान्यता:

$validation = Validator::make($input, $rules, $messages);

$ संदेश सरणी:

$messages = array(
    'required' => ':attribute is verplicht.'
  , 'email'    => ':attribute is geen geldig e-mail adres.'
  , 'min'      => ':attribute moet minimaal :min karakters bevatten.'
  , 'numeric'  => ':attribute mag alleen cijfers bevatten.'
  , 'url'      => ':attribute moet een valide url zijn.'
  , 'unique'   => ':attribute moet uniek zijn.'
  , 'max'      => ':attribute mag maximaal :max zijn.'
  , 'mimes'    => ':attribute moet een :mimes bestand zijn.'
  , 'numeric'  => ':attribute is geen geldig getal.'
  , 'size'     => ':attribute is te groot of bevat te veel karakters.'
);

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं। मैं चाहता हूं: गुण सरणी (भाषा) में "अच्छा नाम" द्वारा प्रतिस्थापित किया जाने वाला गुण नाम।

धन्यवाद!

संपादित करें:

मैंने देखा कि समस्या यह है कि मैंने अपनी लारवेल परियोजनाओं के लिए कभी भी डिफ़ॉल्ट भाषा निर्धारित नहीं की है। जब मैंने भाषा को 'NL' पर सेट किया तो कोड ऊपर काम करता है। लेकिन, जब मैं अपनी भाषा सेट करता हूं, तो भाषा url में दिखाई देगी। और मुझे लगता है कि यह पसंद नहीं है।

तो मेरा अगला प्रश्न: क्या भाषा को url से हटाना संभव है, या डिफ़ॉल्ट भाषा सेट करना संभव है, इसलिए यह वहां दिखाई नहीं देता है?


मुझे यकीन नहीं है कि अगर मैं इसे सही तरीके से समझता हूं, लेकिन आप डिफ़ॉल्ट भाषा को ऐप / कॉन्फिग / ऐप में सेट कर सकते हैं। एफपी जो अनुवाद सेवा प्रदाता द्वारा उपयोग किया जाएगा। प्रत्येक भाषा के लिए आपको ऐप / लैंग / में संबंधित फ़ोल्डर बनाना होगा। उदाहरण के लिए यदि आपके पास "en" और "nl" जैसी भाषाएँ हैं, जिनका उपयोग आप अपने ऐप में करते हैं, तो आपके पास एप्लिकेशन / लैंग / संगत फ़ाइलों के साथ दोनों फ़ोल्डर होने चाहिए (इस उदाहरण में validation.php) ताकि जब भी आप भाषा बदलें, तो वह फ़ाइल लोड किया जाएगा। के रूप में यूआरएल से भाषा को हटाने के लिए मैं पूरी तरह से निश्चित नहीं हूं, लेकिन मेरा मानना ​​है कि आप मार्गों के साथ इसे प्राप्त कर सकते हैं।
अल्‍ट्रीम

मुझे पता है कि भाषाओं को कैसे सेट करना है और इनपुट नामों का अनुवाद करना अब काम कर रहा है। मुझे केवल यह जानने की जरूरत है कि भाषा को यूआरएल से कैसे हटाया जाए। मैं उसे खोजूंगा। धन्यवाद!
हक

निश्चित रूप से यह किया जा सकता है, नीचे मेरा जवाब देखें।
जेवियर कैडिज़

लेकिन यह 5.3 stackoverflow.com/a/41904035/1076753
Vixed

जवाबों:


143

हाँ, "अच्छा नाम" विशेषताएँ जैसा कि आपने इसे कुछ महीने पहले एक वास्तविक "मुद्दा" कहा था। उम्मीद है कि यह सुविधा अब लागू हो गई है और उपयोग करने के लिए बहुत सरल है।

सादगी के लिए मैं इस समस्या से निपटने के लिए दो विकल्पों को विभाजित करूंगा:

  1. ग्लोबल संभवतः अधिक व्यापक है। इस दृष्टिकोण को यहां बहुत अच्छी तरह से समझाया गया है लेकिन मूल रूप से आपको एप्लिकेशन / भाषा / XX / validation.php सत्यापन फ़ाइल को संपादित करने की आवश्यकता है जहां XX वह भाषा है जिसे आप सत्यापन के लिए उपयोग करेंगे।

    नीचे आपको एक विशेषता सरणी दिखाई देगी; वह आपका "अच्छा नाम" गुण सरणी होगा। आपके उदाहरण के बाद अंतिम परिणाम कुछ इस तरह होगा।

    'attributes' => array('first_name' => 'First Name')
    
  2. स्थानीय रूप से यह तब है जब टेलर ओटवेल इस मुद्दे पर बात कर रहे थे जब वह कहते हैं:

    अब आप एक Validator उदाहरण पर setAttributeNames को कॉल कर सकते हैं।

    यह पूरी तरह से मान्य है और यदि आप स्रोत कोड की जाँच करते हैं तो आप देखेंगे

    public function setAttributeNames(array $attributes)
    {
        $this->customAttributes = $attributes;
    
        return $this;
    }
    

    तो, इस तरह से उपयोग करने के लिए निम्नलिखित सीधा उदाहरण देखें:

    $niceNames = array(
        'first_name' => 'First Name'
    );
    
    $validator = Validator::make(Input::all(), $rules);
    $validator->setAttributeNames($niceNames); 
    

साधन

Github पर एक बहुत बढ़िया रेपो है जिसमें बहुत सारे भाषा पैकेज हैं जो जाने के लिए तैयार हैं। निश्चित रूप से आपको इसकी जांच करनी चाहिए।

उम्मीद है की यह मदद करेगा।


2
वैश्विक समाधान के साथ एक समस्या है: एक रूप में मेरे पास हो सकता है 'name' => 'Customer name'और दूसरे रूप में यह हो सकता है 'name'=>'Seller name'। मैं प्रति मॉड्यूल अपने अनुवाद करना पसंद करता हूं, इसलिए मैं इन मानों को फॉर्म फ़ील्ड के लिए लेबल के रूप में भी पुन: उपयोग कर सकता हूं। इसलिए, मैं स्थानीय समाधान के लिए मतदान करता हूं, लेकिन फिर मैं अपनी भाषा फ़ाइल से उस $ नेमनेम सरणी को कैसे पुनः प्राप्त करूं? और मैं setAttributeNamesएक नया Validator उदाहरण बनाए बिना कैसे कॉल कर सकता हूं लेकिन $ इस का उपयोग करके-> मान्य () विधि जो नियंत्रकों में उपलब्ध है?
जस्टअमार्टिन

2
इस टिप्पणी के जवाब में और @javiercadiz के समाधान को पूरा करने के लिए, लारवेल 5.1 के बाद से आप $this->validate(Request $request, $rules, $messages, $customAttributes)उन अच्छे नामों के लिए चौथे पैरामीटर का उपयोग कर सकते हैं । लारवेल 5.1 एपीआई
फ्रैंक अरजोना

आपने अंतिम विकल्प में कोड कहां रखा है? मेरा मतलब इस भाग से है: $validator = Validator::make(Input::all(), $rules); $validator->setAttributeNames($niceNames);
जेन्थे

वैसे, यदि आप "स्थानीय रूप से" समाधान का उपयोग कर रहे हैं, तो आप इस तरह की भाषा फ़ाइल से विशेषता नामों को लोड कर सकते हैं $validator->setAttributeNames(Lang::get('my-language-file')):।
orrd

31

इस विशेष समस्या का सही उत्तर आपके ऐप / लैंग फोल्डर में जाना होगा और फ़ाइल के निचले भाग में वैरिफिकेशन . php फ़ाइल को एडिट करना होगा। इसमें एरे नामक एक विशेषता है :

/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/

'attributes' => array(
    'username' => 'The name of the user',
    'image_id' => 'The related image' // if it's a relation
),

इसलिए मेरा मानना ​​है कि इस सरणी को विशेष रूप से इन विशेषता नामों को अनुकूलित करने के लिए बनाया गया था।


3
यह स्पेनिश में जवाब देने के लिए सबसे अच्छा उत्तर है 'attributes' => [ 'name' => 'nombre', 'mail' => 'correo', 'password' => 'contraseña', 'password2' => 'confirmación de contraseña', ],

1
लारवेल में काम करता है 5.6
येवगेनी अफनासयेव

27

Laravel 5.2 के बाद से आप ...

public function validForm(\Illuminate\Http\Request $request)
{
    $rules = [
        'first_name' => 'max:130'
    ];  
    $niceNames = [
        'first_name' => 'First Name'
    ]; 
    $this->validate($request, $rules, [], $niceNames);

    // correct validation 

8

"विशेषताओं" सरणी में कुंजी इनपुट नाम है और मूल्य वह स्ट्रिंग है जिसे आप संदेश में दिखाना चाहते हैं।

एक उदाहरण अगर आपके पास इस तरह से एक इनपुट है

 <input id="first-name" name="first-name" type="text" value="">

सरणी (सत्यापन में। Php फ़ाइल) होनी चाहिए

 'attributes' => array(
    'first-name' => 'Voornaam'),

मैंने एक ही कोशिश की और यह बहुत अच्छा है। उम्मीद है की यह मदद करेगा।

संपादित करें

इसके अलावा, मैं देख रहा हूँ आप एक पैरामीटर को पारित न करें $errors->has()ताकि शायद यह समस्या हो।

नियंत्रक में इस चेक को ठीक करने के लिए यदि आपके पास इस तरह का एक कोड है

return Redirect::route('page')->withErrors(array('register' => $validator));

फिर आपको इस has()तरह से "रजिस्टर" कुंजी (या जो भी आप उपयोग कर रहे हैं) विधि को पास करना होगा

@if($errors->has('register')
.... //code here
@endif

त्रुटि संदेश प्रदर्शित करने का दूसरा तरीका निम्नलिखित है जो मैं पसंद करता हूं (मैं डिजाइन के लिए ट्विटर बूटस्ट्रैप का उपयोग करता हूं लेकिन निश्चित रूप से आप अपने स्वयं के डिजाइन के साथ उन्हें बदल सकते हैं)

 @if (isset($errors) and count($errors->all()) > 0)
 <div class="alert alert-error">
    <h4 class="alert-heading">Problem!</h4>
     <ul>
        @foreach ($errors->all('<li>:message</li>') as $message)
         {{ $message }}
       @endforeach
    </ul>
</div>

1
क्या होगा यदि फ़ील्ड नाम एक सरणी है? उदाहरण के लिए, <input type="text" name="txt[]" />"। त्रुटि कुछ उत्पादन की तरह होगा The txt.0 is required.। आप इसे अच्छे नामों से कैसे बदल सकते हैं?
अन्ना फोर्टुना

@AnnaFortuna इस पोस्ट को देखें कि क्या यह आपकी मदद कर सकता है stackoverflow.com/questions/17974231/…
Altrim

धन्यवाद @Altrim, मैं इसे बाहर की जाँच करेंगे।
अन्ना फोर्टुना

4

Laravel 4.1 में ऐसा करने का आसान तरीका लैंग फ़ोल्डर में जाता है -> आपकी भाषा (डिफ़ॉल्ट एन) -> सत्यापन .php।

जब आपके पास यह आपके मॉडल में होता है, उदाहरण के लिए:

'group_id' => 'Integer|required',
'adult_id' => 'Integer|required',

और आप नहीं चाहते हैं कि त्रुटि "कृपया एक समूह आईडी दर्ज करें", आप सत्यापन में कस्टम सरणी जोड़कर "अच्छा" सत्यापन संदेश बना सकते हैं। तो हमारे उदाहरण में, कस्टम सरणी इस तरह दिखाई देगी:

'custom' => array(
    'adult_id' => array(
        'required' => 'Please choose some parents!',
    ),
    'group_id' => array(
        'required' => 'Please choose a group or choose temp!',
    ),
),

यह बहु-भाषा एप्लिकेशन के साथ भी काम करता है, आपको बस सही भाषा सत्यापन फ़ाइल को संपादित (बनाने) की आवश्यकता है।

डिफ़ॉल्ट भाषा एप / कॉन्फिग / एप.फ कॉन्फ़िगरेशन फाइल में संग्रहित है, और डिफ़ॉल्ट रूप से अंग्रेजी है। इसे App::setLocaleविधि का उपयोग करके किसी भी समय बदला जा सकता है ।

त्रुटियों और भाषाओं दोनों की अधिक जानकारी यहाँ सत्यापन और स्थानीयकरण से मिल सकती है ।


2

मैं इस तरह के "अच्छे नामों" के लिए इनपुट के रूप में अपनी कस्टम भाषा फ़ाइलों का उपयोग करता हूं :

$validator = Validator::make(Input::all(), $rules);
$customLanguageFile = strtolower(class_basename(get_class($this)));

// translate attributes
if(Lang::has($customLanguageFile)) {
    $validator->setAttributeNames($customLanguageFile);
}

2

लारवेल में 7।

use Illuminate\Support\Facades\Validator;

फिर अच्छा नाम परिभाषित करें

$niceNames = array(
   'name' => 'Name',
);

और अंतिम, चौथे पैरामीटर में, इस तरह से $ $ नाम रखें:

$validator = Validator::make($request->all(), $rules, $messages, $niceNames);

1

: विशेषता केवल विशेषता नाम (आपके मामले में first_name) का उपयोग कर सकती है, न कि अच्छे नामों की।

लेकिन आप इस तरह के निश्चित संदेशों द्वारा प्रत्येक विशेषता + सत्यापन के लिए कस्टम संदेशों को परिभाषित कर सकते हैं:

$messages = array(
  'first_name_required' => 'Please supply your first name',
  'last_name_required' => 'Please supply your last name',
  'email_required' => 'We need to know your e-mail address!',
  'email_email' => 'Invalid e-mail address!',
);

1
$customAttributes = [
'email' => 'email address',
];

$validator = Validator::make($input, $rules, $messages, $customAttributes);

6
हालांकि यह कोड समस्या का समाधान प्रदान कर सकता है, लेकिन यह अत्यधिक अनुशंसा की जाती है कि आप इस कोड को प्रश्न का उत्तर क्यों और / या कैसे प्रदान करते हैं। कोड केवल उत्तर आमतौर पर लंबे समय में बेकार हो जाते हैं क्योंकि भविष्य के दर्शकों को इसी तरह की समस्याओं का सामना करना पड़ता है जो समाधान के पीछे के तर्क को समझ नहीं सकते हैं।
ई। ज़ीनटीन

0

ठीक है, यह काफी पुराना सवाल है, लेकिन मुझे कम से कम यह इंगित करना चाहिए कि URL पर दिखाई देने वाली समस्या को हल किया जा सकता है:

  • भाषा बदलना और फ़ॉलबैक_ लैंग्वेज config/app.php;
  • या सेटिंग द्वारा \ App :: setLocale ($ लैंग)

यदि इसे सत्र के माध्यम से जारी रखने की आवश्यकता है, तो मैं वर्तमान में ऐसा करने के लिए "AppServiceProvider" का उपयोग करता हूं, लेकिन, मुझे लगता है कि URL द्वारा भाषा बदलने की आवश्यकता होने पर एक मिडलवेयर एक बेहतर तरीका हो सकता है, इसलिए, मुझे अपने प्रदाता पर यह पसंद है:

    if(!Session::has('locale'))
    {
        $locale = MyLocaleService::whatLocaleShouldIUse();
        Session::put('locale', $locale);
    }

    \App::setLocale(Session::get('locale'));

इस तरह मैं सत्र को संभालता हूं और यह मेरे url पर नहीं टिकता है।

स्पष्ट करने के लिए कि मैं वर्तमान में लारवेल 5.1+ का उपयोग कर रहा हूं, लेकिन 4.x से भिन्न व्यवहार नहीं होना चाहिए;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.