लारवेल - मार्ग :: संसाधन बनाम मार्ग :: नियंत्रक


138

मैंने लारवेल वेबसाइट, स्टैक ओवरफ्लो और Google पर डॉक्स पढ़े, लेकिन अभी भी Route::resourceऔर इसके बीच के अंतर को नहीं समझते हैं Route::controller

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

वे भाई-बहन की तरह प्रतीत होते हैं:

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

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


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

जवाबों:


282

प्रतिष्ठित संसाधन नियंत्रक

एक 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|PATCH     /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']
]);

प्रतिष्ठित संसाधन नियंत्रक प्रलेखन


इम्प्लिमेंट कंट्रोलर

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

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

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

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'
    }

}

कार्यान्वयन नियंत्रक प्रलेखन


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


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

क्या कोई स्पष्ट कर सकता है कि। Resource.edit ’का क्या उद्देश्य है? यह एक GET विधि है, इसलिए मैं मान रहा हूं कि 'संसाधन.शो' के माध्यम से सीमित जानकारी के बजाय किसी संसाधन पर पूरी जानकारी दी जानी चाहिए?
एंथनी

1
@ एंथनी - resource.editएक संपादित दृश्य दिखाना है, मूल रूप से, मौजूदा संसाधन को संपादित करने के लिए फ़ॉर्म।
रयानविनचेस्टर

@fungku यह दिलचस्प है .. तो क्या आप कह रहे हैं कि resource.edit वास्तव में JSON के बजाय HTML लौटाएगा?
एंथनी

2
@Anthony आम तौर पर, (और जहाँ तक मुझे पता है) हाँ। resource.editऔर resource.createआम तौर पर एक यूआई के लिए ... HTML रूपों के साथ एक दृश्य प्रदान करना। वे फॉर्म क्रमशः resource.updateऔर resource.storeक्रमशः पोस्ट / पोस्ट करेंगे । यदि आप ऐसा नहीं कर रहे हैं, तो आप उन्हें अनदेखा कर सकते हैं और अपने नियंत्रक में संपादन () और बनाने () के तरीकों से छुटकारा पा सकते हैं।
ryanwinchester

3

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

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

यहाँ इस बारे में लारवेल प्रलेखन

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