2014-05-06 20 views
69

मैंने लैरवेल वेबसाइट, स्टैक ओवरफ़्लो और Google पर दस्तावेज़ पढ़े लेकिन अभी भी Route::resource और Route::controller के बीच का अंतर नहीं समझते हैं।लार्वेल - मार्ग :: संसाधन बनाम रूट :: नियंत्रक

उत्तर में से एक ने कहा कि मार्ग :: संसाधन क्रूड के लिए था। हालांकि, रूट :: नियंत्रक के साथ हम रूट :: संसाधन के साथ एक ही चीज़ को पूरा कर सकते हैं और हम केवल आवश्यक क्रियाएं निर्दिष्ट कर सकते हैं।

वे भाई बहन की तरह दिखाई देते हैं:

Route::controller('post','PostController'); 
Route::resource('post','PostController'); 

कैसे हम क्या उपयोग करने के लिए चुन सकते हैं? अच्छा अभ्यास क्या है?

+10

लैरवेल 5.2 उपयोगकर्ताओं के लिए बस एक नोट, इस बीच निहित नियंत्रकों को बहिष्कृत कर दिया गया है। – Roy

+0

मार्ग :: नियंत्रक एड-बैक कोड: https://github.com/shrimpwagon/laravel-route-controller – shrimpwagon

उत्तर

139

RESTful संसाधन नियंत्रक

एक RESTful संसाधन नियंत्रक आपके लिए कुछ डिफ़ॉल्ट मार्गों और यहां तक ​​कि उन्हें नाम सेट करता है।

Route::resource('users', 'UsersController'); 

आप इन नामित रास्तों देता है:

Verb Path      Action Route Name 
GET  /users      index users.index 
GET  /users/create    create users.create 
POST /users      store users.store 
GET  /users/{user}    show users.show 
GET  /users/{user}/edit   edit users.edit 
PUT  /users/{user}    update users.update 
DELETE /users/{user}    destroy users.destroy 

और तुम इस तरह अपने नियंत्रक कुछ (कार्रवाई = तरीकों)

class UsersController extends BaseController { 

    public function index() {} 

    public function show($id) {} 

    public function store() {} 

} 

तुम भी चुन सकते हैं क्या कार्रवाई शामिल किए गए हैं सेट अप करना होगा या इस तरह से बाहर रखा गया:

Route::resource('users', 'UsersController', [ 
    'only' => ['index', 'show'] 
]); 

Route::resource('monkeys', 'MonkeysController', [ 
    'except' => ['edit', 'create'] 
]); 

RESTful Resource Controller documentation


अंतर्निहित नियंत्रक

एक अंतर्निहित नियंत्रक अधिक लचीला है। HTTP अनुरोध प्रकार और नाम के आधार पर आप अपने नियंत्रक विधियों पर जाते हैं। हालांकि, आपके पास रूट नाम आपके लिए परिभाषित नहीं हैं और यह उसी रूट के लिए सभी उपफोल्डर्स को पकड़ लेगा।

Route::controller('users', 'UserController'); 

RESTful नामकरण योजना का एक तरह से नियंत्रक स्थापित करने के लिए आप का नेतृत्व करेंगे:

class UserController extends BaseController { 

    public function getIndex() 
    { 
     // GET request to index 
    } 

    public function getShow($id) 
    { 
     // get request to 'users/show/{id}' 
    } 

    public function postStore() 
    { 
     // POST request to 'users/store' 
    } 

} 

Implicit Controller documentation


यह उपयोग करने के लिए आपको क्या चाहिए अच्छा अभ्यास है, आपकी वरीयता के अनुसार। मुझे व्यक्तिगत रूप से लागू नियंत्रक पसंद नहीं है, क्योंकि वे गन्दा हो सकते हैं, नाम प्रदान नहीं करते हैं और php artisan routes का उपयोग करते समय भ्रमित हो सकते हैं। मैं आमतौर पर स्पष्ट मार्गों के संयोजन में रीस्टफुल संसाधन नियंत्रक का उपयोग करता हूं।

+0

यदि हम कई संसाधन मार्गों का उपयोग करते हैं (शायद इंडेक्स, शो) क्यों स्थिर मार्गों का उपयोग नहीं करें रूट :: get (। ..)? मुझे लगता है कि यह उपयोग सरणी ('केवल' => सरणी ('इंडेक्स', 'शो') से सबसे खराब नहीं है। और जब हम 'उपयोगकर्ता/123' जैसे कुछ अनुरोध करते हैं, तो RESTFull नियंत्रक के लिए कौन सी विधि उपयोग की जाती है, getIndex() के लिए काम करता है 'उपयोगकर्ता /' लेकिन उपयोगकर्ता/123 के साथ मुझे त्रुटि नहीं मिलती है NotFoundHttpException (अलग-अलग नामों को देखने का प्रयास करें और अन्य, केवल नियंत्रक @ getView के रूप में घोषित होने पर ही काम करता है)? – Sonique

+0

क्या कोई स्पष्टीकरण दे सकता है कि 'resource.edit' का उद्देश्य क्या है? यह एक जीईटी विधि है , तो मुझे लगता है कि इसे 'संसाधन.शो' के माध्यम से केवल सीमित जानकारी के बजाय संसाधन पर पूर्ण जानकारी प्राप्त करने के लिए माना जाता है? – Anthony

+0

@ एंथनी - 'resource.edit' एक संपादन दिखाने के लिए है, मूल रूप से, फ़ॉर्म के लिए मौजूदा संसाधन को संपादित करना – ryanwinchester

0

मार्ग नियंत्रक विधि के लिए हमें केवल एक ही मार्ग परिभाषित करना होगा। प्राप्त करने या पोस्ट विधि में हमें मार्ग को अलग से परिभाषित करना होगा।

और संसाधन विधि का उपयोग कई प्रकार के आरामदायक कार्यों को संभालने के लिए कई मार्ग बनाने के लिए किया जाता है।

यहां लार्वेल documentation इस बारे में।

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