मैं Laravel 5.एक लार्वा नियंत्रक से AJAX त्रुटियों को वापस कैसे करें?
के साथ एक REST API का निर्माण कर रहा हूँ Laravel 5 में, आप App\Http\Requests\Request
उपवर्ग सत्यापन नियमों कि संतुष्ट होना चाहिए से पहले एक विशेष मार्ग कार्रवाई की जाएगी परिभाषित करने के लिए कर सकते हैं। उदाहरण के लिए:
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class BookStoreRequest extends Request {
public function authorize() {
return true;
}
public function rules() {
return [
'title' => 'required',
'author_id' => 'required'
];
}
}
एक ग्राहक एक AJAX अनुरोध के माध्यम से संगत रास्ते लोड करता है, और BookStoreRequest
पता चलता है कि अनुरोध नियमों को पूरा नहीं है, यह पूर्ण रूप से अपने त्रुटि (रों) वापस आ जाएगी एक JSON वस्तु के रूप में है। उदाहरण के लिए:
{
"title": [
"The title field is required."
]
}
हालांकि, Request::rules()
विधि केवल मान्य कर सकते हैं इनपुट और भले ही इनपुट मान्य है, त्रुटियों के अन्य प्रकार पैदा कर सकता अनुरोध के बाद पहले से ही स्वीकार किया गया है और नियंत्रक को हस्तांतरित कर दिया। उदाहरण के लिए, मान लें कि नियंत्रक किसी कारण-लेकिन फ़ाइल के लिए एक फ़ाइल के लिए नई किताब जानकारी लिखने के लिए की जरूरत है खोला नहीं जा सकता है:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Requests\BookCreateRequest;
class BookController extends Controller {
public function store(BookStoreRequest $request) {
$file = fopen('/path/to/some/file.txt', 'a');
// test to make sure we got a good file handle
if (false === $file) {
// HOW CAN I RETURN AN ERROR FROM HERE?
}
fwrite($file, 'book info goes here');
fclose($file);
// inform the browser of success
return response()->json(true);
}
}
जाहिर है, मैं तो बस die()
कर सकते थे, लेकिन यह है कि सुपर बदसूरत है। मैं सत्यापन त्रुटि त्रुटियों के समान प्रारूप में अपना त्रुटि संदेश वापस करना पसंद करूंगा। इस तरह:
{
"myErrorKey": [
"A filesystem error occurred on the server. Please contact your administrator."
]
}
मैं अपने खुद के JSON ऑब्जेक्ट का निर्माण कर सकता है और वापसी कि-लेकिन निश्चित रूप से Laravel इस देशी रूप का समर्थन करता है।
ऐसा करने का सबसे अच्छा/साफ तरीका क्या है? या क्या लारवेल रीस्ट एपीआई से रनटाइम (वैध समय के विपरीत) त्रुटियों को वापस करने का एक बेहतर तरीका है?
आप केवल 'वापसी प्रतिक्रिया() -> जेसन ([' त्रुटि '=>' आपका कस्टम संदेश '] क्यों नहीं कर सकते हैं;'? –
आप एक कस्टम जेसन प्रतिक्रिया वर्ग – Digitlimit
'रिटर्न प्रतिक्रिया() -> जेसन()' 200 ओके के साथ वापस कर सकते हैं। मैं एक उपयुक्त गैर-200 प्रतिक्रिया कोड (उदाहरण के लिए, 500 आंतरिक सर्वर त्रुटि) का उपयोग करना चाहता हूं। हाँ, मैं भी हाथ-कोड कर सकता था-मैंने अभी माना है कि लार्वेल ने पहले ही ऐसा करने का एक अंतर्निहित, अधिक संरचित तरीका प्रदान किया है। शायद यह एक गलत धारणा है। – greenie2600