2017-06-13 17 views
9

blade.phpउपयोगकर्ता समारोह

...... 
<tr> 
    <td>{{ Form::label('cameraMac', 'Mac: ') }}</td> 
    <td>{{ Form::text('cameraMac')}}</td> 
</tr> 
...... 

controller.php

$data = Input::all(); 
function transform($cameraMac) { 
    return strtoupper($cameraMac); 
} 

//validation here 

$user = User::find($data['user_id']); 

if($data["cameraMac"]) 
{ 
    $user->camera_id = transform($data["cameraMac"]); 
    Cloud_camera::create(['id' => transform($data["cameraMac"]), 'user_id' => $user->id]); 
} 

$user->save(); 

मैं DB में स्टोर करने के लिए प्राथमिक कुंजी को cameraMac को बदलने की जरूरत है के साथ मान्य Laravel। मैं प्रमाणीकरण नियम 'nullable|unique:cloud_cameras,id|size:6' में फ़ंक्शन transform() का उपयोग कैसे कर सकता हूं। ऐसा कहने के लिए, मैं इस फ़ंक्शन को सत्यापन प्रक्रिया में कैसे कॉल कर सकता हूं।

उत्तर

3

हो जाएगा आप merge विधि का उपयोग कर सकते हैं:

Input::merge(['cameraMac' => transform(Input::get('cameraMac')]); 
$this->validate(Input::getFacadeRoot(), [ 
    'cameraMac' => 'nullable|unique:cloud_cameras,id|size:6' 
]); 

एक निजी पसंद मैं w के रूप में ould बजाय नियंत्रक विधि में टाइप-संकेत Illuminate\Http\Request $request और फिर

$request->merge(['cameraMac' => transform($request->cameraMac)]); 
$this->validate($request, ['cameraMac' => 'nullable|unique:cloud_cameras,id|size:6' 
]); 
+0

इस फ़ंक्शन को वैधकर्ता में कॉल करने का कोई तरीका है, पहले डेटा को ट्रांस नहीं करें। –

+0

@ KrisRoofe हाँ, आप एक कस्टम ["फॉर्म अनुरोध"] (https://laravel.com/docs/5.4/validation#form-request- validation) बना सकते हैं जहां आप अपना सत्यापन और प्रमाणीकरण तर्क डाल सकते हैं, और ओवरराइड भी कर सकते हैं 'सत्यापन डेटा' विधि और वहां 'विलय' करें। – alepeino

1

क्या आप शर्मिंदा हैं, कि आप चाहते हैं कि क्षेत्र cameraMac एक (अधिक या कम) प्राथमिक कुंजी के रूप में शून्य हो?

आपको size सत्यापन का उपयोग करने के लिए int सत्यापन का भी उपयोग करना चाहिए।
uniquevalidation का तीसरा पैरामीटर except है जो दिए गए आईडी को अनदेखा करेगा।

नियंत्रक में आपका सत्यापन इस

$except_id = $request->input('cameraMac', null); 

$this->validate($request, [ 
    'cameraMac' => 'nullable|unique:cloud_cameras,id,'.$except_id.'|int|size:6' 
]); 

One example दिखाई दे सकता है कि कैसे आप विचारों में अपने मान्यता की त्रुटियों को दिखा सकते हैं आप किसी भी तरह इनपुट डेटा को बदलने के लिए की जरूरत है इस

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 
+0

हाँ यह एक प्राथमिक कुंजी है। जब यह निकलता है तो एक नया कैमरा बनाया जाएगा। और एक उपयोगकर्ता से बांधें। यदि मौजूद नहीं है तो उपयोगकर्ता का कैमरा_आईडी शून्य है। –

1

अब मैं ट्रांस के लिए इनपुट डेटा पहले, तो यह नीचे रास्ते में मान्य।

लेकिन मैं इस funciton को सत्यापन में कॉल करने का एक तरीका ढूंढ रहा हूं।

$data = Input::all(); 
$data['cameraMac'] = transform($data['cameraMac']); 
$rules = array(
    'id' => 'required|unique:cloud_printers,id|size:6', 
    'cameraMac' => 'unique:cloud_cameras,id|size:6', 
); 
$validator = Validator::make($data, $rules); 
if ($validator->fails()) 
    return Redirect::back()->withInput()->withErrors($validator); 
+0

सत्यापन नियम किसी ऑब्जेक्ट की तुलना किसी अन्य या नियम से करना है। तुलना करने से पहले डेटा को बदलने के लिए यह नहीं है।आप इसे वहां क्यों चाहते हैं, तो यह अच्छा लगता है? और इसे ऊपरी मामले के साथ डेटाबेस में सहेजा जाना चाहिए? यदि हां, तो आपको इसे पहले बदलना होगा। – mimo

+0

@ मिमो ऊपरी परिवर्तन सिर्फ एक साधारण उदाहरण है, वास्तव में मैं इसे कुछ एन्क्रिप्ट करता हूं। –

+1

तो क्या आप इसे सत्यापन के लिए बदलना चाहते हैं और फिर यह सामान्य होना चाहिए? आप एक कस्टम सत्यापन टैग लिख सकते हैं और इसमें पूर्ण सत्यापन कर सकते हैं। – mimo

2

मैं defining a middleware पर विचार होगा।

मिडलवेयर रूपांतरण करेगा और परिणाम को वापस नियंत्रक को मारने से पहले अनुरोध में विलय करेगा।

class TransformId { 
    public function handle(Request $request, Closure $next) { 
     // shout out to @alepeino 
     $request->merge(['cameraMac' => transform($request->cameraMac)]); 

     return $next($request); 
    } 
} 
1

आप एक custom validation rule परिभाषित कर सकते हैं:

Validator::extend('transformUpper', function ($attribute, $value, $parameters, $validator) { 
    return strtoupper($value); 
}); 

फिर हमेशा की तरह अनुरोध में नए नियम का उपयोग करें:

$this->validate($request, [ 
    'cameraMac' => 'required|transformUpper' 
]); 
+0

मैं कस्टम सत्यापन और अद्वितीय सत्यापन को एक साथ कैसे उपयोग कर सकता हूं? मैं चाहता हूं कि परिवर्तित कैमरामैक डेटाबेस में अद्वितीय हो। –

+0

सत्यापनकर्ता सही या गलत लौटाता है, मुझे नहीं लगता कि आपका कोड कैमरामैक के इनपुट मान को बदल देगा। –

संबंधित मुद्दे