2015-08-04 12 views
8

मैं लार्वेल 5.1 दस्तावेज पढ़ रहा था। मुझे समझ में नहीं आया कि लार्वा मार्ग समूह कैसे काम करता है और निम्नलिखित मार्ग समूहों के बीच क्या अंतर है।लार्वेल 5.1 में मिडलवेयर मार्ग समूह और नामस्थान मार्ग समूह के बीच अंतर?

मार्ग समूह & नामित रास्तों

आप मार्ग समूहों का उपयोग कर रहे हैं, तो आप आप समूह के सभी मार्गों के लिए एक आम मार्ग नाम उपसर्ग सेट करने के लिए अनुमति मार्ग समूह विशेषता सरणी में कीवर्ड के रूप में एक निर्दिष्ट कर सकता है, :

Route::group(['as' => 'admin::'], function() { 
    Route::get('dashboard', ['as' => 'dashboard', function() { 
     // Route named "admin::dashboard" 
    }]); 
}); 

मिडिलवेयर

एक समूह के भीतर सभी मार्गों को मिडलवेयर सौंपने के लिए समूह विशेषता सरणी में मिडलवेयर कुंजी का उपयोग कर सकते हैं। Middleware क्रम में निष्पादित किया जाएगा तो आप इस सरणी को परिभाषित:

Route::group(['middleware' => 'auth'], function() { 
    Route::get('/', function() { 
     // Uses Auth Middleware 
    }); 

    Route::get('user/profile', function() { 
     // Uses Auth Middleware 
    }); 
}); 

नेमस्पेस

एक अन्य आम यूज-केस मार्ग समूहों के लिए नियंत्रकों के एक समूह को एक ही पीएचपी नाम स्थान बताए है। आप समूह के सभी नियंत्रकों के लिए नाम स्थान निर्दिष्ट करने के लिए अपने समूह विशेषता सरणी में नाम स्थान पैरामीटर का उपयोग कर सकते हैं:

Route::group(['namespace' => 'Admin'], function() 
    { 
     // Controllers Within The "App\Http\Controllers\Admin" Namespace 
     Route::group(['namespace' => 'User'], function() 
     { 
      // Controllers Within The "App\Http\Controllers\Admin\User" Namespace 
     }); 
    }); 

उप-डोमेन रूटिंग

मार्ग समूहों को भी मार्ग वाइल्डकार्ड उप करने के लिए इस्तेमाल किया जा सकता है डोमेन। उप-डोमेन को रूट यूआरआई जैसे मार्ग पैरामीटर असाइन किए जा सकते हैं, जिससे आप अपने मार्ग या नियंत्रक में उपयोग के लिए उप-डोमेन का एक हिस्सा कैप्चर कर सकते हैं। सब-डोमेन समूह विशेषता सरणी पर डोमेन की का उपयोग निर्दिष्ट किया जा सकता:

Route::group(['domain' => '{account}.myapp.com'], function() { 
    Route::get('user/{id}', function ($account, $id) { 
     // 
    }); 
});  

मार्ग उपसर्गों

उपसर्ग समूह सरणी विशेषता एक दिया साथ समूह में प्रत्येक मार्ग उपसर्ग के लिए इस्तेमाल किया जा सकता है यूआरआई। उदाहरण के लिए, आप व्यवस्थापक के साथ समूह के सभी मार्ग यूआरआई उपसर्ग कर सकते हैं:

Route::group(['prefix' => 'admin'], function() { 
    Route::get('users', function() { 
     // Matches The "/admin/users" URL 
    }); 
}); 

आप भी अपने वर्गीकृत किया मार्गों के लिए आम पैरामीटर निर्दिष्ट करने उपसर्ग पैरामीटर का उपयोग कर सकते हैं:

Route::group(['prefix' => 'accounts/{account_id}'], function() { 
    Route::get('detail', function ($account_id) { 
     // Matches The accounts/{account_id}/detail URL 
    }); 
}); 

रेफरी: http://laravel.com/docs/5.1/routing

उत्तर

9

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

उदाहरण

एक उदाहरण नाम स्थान सरणी विशेषता का उपयोग करने देता है।

कहें कि हमारे पास NewsController नामक नियंत्रक है जिसमें आपके ऐप्स समाचार अनुभाग के लिए सभी व्यवस्थापक तर्क शामिल हैं। आप इस फ़ाइल को 'ऐप/एचटीपी/नियंत्रक/व्यवस्थापक' निर्देशिका में डाल सकते हैं।

Laravel 5 PSR-4 autoloading conventions इस प्रकार है, इसलिए आवेदन, नाम स्थान expcets फ़ाइल का रास्ता के समान होने के लिए इतना हमारी कक्षा कुछ इस तरह दिख सकता है:

<?php 

namespace App\Http\Controllers\Admin; 

class NewsController 
{ 

} 

हम की तरह इस वर्ग के लिए एक मार्ग लिख सकता है इसलिए:

Route::get('admin/news', [ 
    'uses' => 'Admin\[email protected]' 
]); 

नोट: Laravel स्वचालित रूप से मान लिया गया है अपने सभी नियंत्रकों App/Http/Controllers निर्देशिका में हो जाएगा तो हम में से इस छोड़ सकते हैं मार्ग फ़ाइल में कोई नियंत्रक घोषणाएं।

उपरोक्त को ठीक काम करना चाहिए, लेकिन हो सकता है कि आपके पास एक दर्जन या तो अन्य क्लास फाइलें हों जो व्यवस्थापक नाम के साथ समान नामस्थान के साथ सौदा करती हैं। हम इन्हें समूहबद्ध करने के लिए नेमस्पेस विकल्प का उपयोग कर सकते हैं।

Route::group(['namespace' => 'Admin'], function() 
{ 
    Route::get('admin/news', [ 
     'uses' => '[email protected]' 
    ]); 

    Route::get('admin/users', [ 
     'uses' => '[email protected]' 
    ]); 

    ... 
}); 

सूचना कैसे मैं अब हर रूट के लिए नियंत्रक के लिए Admin नाम स्थान परिभाषित करते हैं।

उसी प्रक्रिया को मिडलवेयर, सबडोमेन और यूआरएल उपसर्गों पर लागू किया जा सकता है।

इसके अलावा उदाहरण

पहला उदाहरण लेते हैं और उसके आधार पर आगे की सुविधा देता है। जैसा कि आप उपर्युक्त मार्ग घोषणाओं से देख सकते हैं, हमारे सभी व्यवस्थापक मार्ग एक सामान्य यूआरएल उपसर्ग साझा करते हैं।

http://example.com/व्यवस्थापक/समाचार
http://example.com/व्यवस्थापक/उपयोगकर्ताओं

हम prefix सरणी हमारे मार्गों के लिए आम यूआरएल को परिभाषित करने का श्रेय उपयोग कर सकते हैं। हमारे मामले में यह admin है।

हमारे अपडेटेड रूट घोषणाएं इस तरह दिखाई देगी।

Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function() 
{ 
    Route::get('news', [ 
     'uses' => '[email protected]' 
    ]); 

    Route::get('users', [ 
     'uses' => '[email protected]' 
    ]); 

    ... 
}); 

शायद आपको आश्चर्य होगा कि यह उपयोगी क्यों होगा? अच्छी तरह से कल्पना करें कि यदि सैकड़ों मार्ग नहीं हैं तो आपने दसियों के साथ एक बड़ा आवेदन विकसित किया है। फिर एक दिन आपका मालिक आपके पास आता है और कहता है, "हे श्रीमान परीक्षक, हमें /admin से /cms पर व्यवस्थापक यूआरएल बदलने की जरूरत है, यह कब तक लगेगा?"।

यदि आपने ऊपर दिए गए उपसर्ग सरणी विशेषता वाले समूहों का उपयोग करके अपने सभी मार्गों को घोषित कर दिया है, तो यह आपके लिए एक आसान और दर्द रहित प्रक्रिया होगी।

+0

अच्छी व्याख्या के लिए धन्यवाद। मैं एक नमूना परियोजना के साथ कोशिश करूंगा। – vision

+0

केवल व्यवस्थापक को यूआरएल एक्सेस यूआरएल की अनुमति कैसे दें? अगर हमारे पास व्यवस्थापक, प्रबंधक और सामान्य उपयोगकर्ता – vision

+0

@tester Thats जैसे एकाधिक उपयोगकर्ता हैं, तो आप मिडलवेयर विशेषता का उपयोग करना चाहेंगे। – Jeemusu

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