खोज…
बेसिक रूटिंग
रूटिंग एक तरफ HTTP मेथड्स और यूआरआई के बीच मैप को परिभाषित करता है, और दूसरी ओर एक्शन। रूट आमतौर पर app/Http/routes.php
. app/Http/routes.php
फ़ाइल में app/Http/routes.php
हैं।
अपने सरलतम रूप में, रूट मार्ग पर संगत HTTP पद्धति को कॉल करके एक मार्ग को परिभाषित किया जाता है, जो एक स्ट्रिंग के रूप में गुजरता है जो URI (एप्लिकेशन रूट के सापेक्ष), और कॉलबैक से मेल खाता है।
उदाहरण के लिए: साइट का मूल URI का मार्ग जो एक दृश्य home
लौटाता है, ऐसा दिखता है:
Route::get('/', function() {
return view('home');
});
पोस्ट अनुरोध के लिए एक मार्ग जो बस पोस्ट चर को गूँजता है:
Route::post('submit', function() {
return Input::all();
});
//or
Route::post('submit', function(\Illuminate\Http\Request $request) {
return $request->all();
});
नियंत्रक विधि की ओर इशारा करते हुए रूट
कॉलबैक इनलाइन को परिभाषित करने के बजाय, मार्ग एक नियंत्रक विधि को [कंट्रोलरक्लासनाम @ विधि] सिंटैक्स में संदर्भित कर सकता है:
Route::get('login', 'LoginController@index');
एकाधिक क्रियाओं के लिए एक मार्ग
match
विधि का उपयोग किसी दिए गए मार्ग के लिए HTTP विधियों की एक सरणी से मेल खाने के लिए किया जा सकता है:
Route::match(['GET', 'POST'], '/', 'LoginController@index');
इसके अलावा, आप किसी दिए गए मार्ग के लिए किसी भी HTTP विधि से मिलान करने के लिए all
का उपयोग कर सकते हैं:
Route::all('login', 'LoginController@index');
मार्ग समूह
कोड पुनरावृत्ति से बचने के लिए मार्गों को समूहीकृत किया जा सकता है।
चलो का एक उपसर्ग के साथ सभी यूआरआई कहना /admin
उपयोग एक निश्चित मिडलवेयर बुलाया admin
वे सब में रहते हैं और App\Http\Controllers\Admin
नाम स्थान।
मार्ग समूहों का उपयोग करके इसका प्रतिनिधित्व करने का एक साफ तरीका इस प्रकार है:
Route::group([
'namespace' => 'Admin',
'middleware' => 'admin',
'prefix' => 'admin'
], function () {
// something.dev/admin
// 'App\Http\Controllers\Admin\IndexController'
// Uses admin middleware
Route::get('/', ['uses' => 'IndexController@index']);
// something.dev/admin/logs
// 'App\Http\Controllers\Admin\LogsController'
// Uses admin middleware
Route::get('/logs', ['uses' => 'LogsController@index']);
});
जिसका नाम रूट रखा गया
नामांकित मार्गों का उपयोग URL या किसी विशिष्ट मार्ग पर पुनर्निर्देशित करने के लिए किया जाता है। नामित मार्ग का उपयोग करने का लाभ यह है कि यदि हम भविष्य में किसी मार्ग के URI को बदलते हैं, तो हमें नामांकित मार्ग का उपयोग करने पर उस मार्ग की ओर संकेत करने वाले URL या पुनर्निर्देशन को बदलने की आवश्यकता नहीं होगी। लेकिन अगर लिंक url [उदा। url('/admin/login')
], तो हमें हर जगह बदलना होगा जहाँ इसका उपयोग किया जाता है।
नामित मार्गों as
सरणी कुंजी के as
उपयोग करके बनाया as
Route::get('login', ['as' => 'loginPage', 'uses' => 'LoginController@index']);
या विधि name
का उपयोग कर
Route::get('login', 'LoginController@index')->name('loginPage');
नामित मार्ग का उपयोग करके URL उत्पन्न करें
मार्ग के नाम का उपयोग करके एक यूआरएल उत्पन्न करने के लिए
$url = route('loginPage');
यदि आप रूट नाम का उपयोग पुनर्निर्देशन के लिए कर रहे हैं
$redirect = Redirect::route('loginPage');
मार्ग पैरामीटर
यूआरआई खंड का हिस्सा पाने के लिए आप मार्ग मापदंडों का उपयोग कर सकते हैं। आप एक रूट बनाते समय वैकल्पिक या आवश्यक रूट पैरामीटर / s परिभाषित कर सकते हैं। वैकल्पिक मापदंडों में एक है ?
पैरामीटर नाम के अंत में जोड़ा गया। यह नाम घुंघराले ब्रेसिज़ {}
में संलग्न है
वैकल्पिक पैरामीटर
Route::get('profile/{id?}', ['as' => 'viewProfile', 'uses' => 'ProfileController@view']);
इस मार्ग तक पहुँचा जा सकता है domain.com/profile/23
जहाँ 23 आईडी पैरामीटर है। इस उदाहरण में id
को ProfileController
की view
विधि में एक पैरामीटर के रूप में पारित किया गया है। चूंकि यह एक वैकल्पिक पैरामीटर है, जो domain.com/profile
तक पहुँचने के लिए ठीक काम करता है।
आवश्यक पैरामीटर
Route::get('profile/{id}', ['as' => 'viewProfile', 'uses' => 'ProfileController@view']);
ध्यान दें कि आवश्यक पैरामीटर्स का नाम ए नहीं है ?
पैरामीटर नाम के अंत में।
कंट्रोलर में पैरामीटर एक्सेस करना
आपके कंट्रोलर में, आपकी व्यू मेथड उसी पैरामीटर के साथ पैरामीटर लेती है, जो routes.php
में एक है। routes.php
और सामान्य वेरिएबल की तरह इस्तेमाल किया जा सकता है। लारवेल मूल्य को नियंत्रित करने का ख्याल रखता है:
public function view($id){
echo $id;
}
सभी मार्गों को पकड़ो
यदि आप सभी मार्गों को पकड़ना चाहते हैं, तो आप दिखाए गए अनुसार एक नियमित अभिव्यक्ति का उपयोग कर सकते हैं:
Route::any('{catchall}', 'CatchAllController@handle')->where('catchall', '.*');
महत्वपूर्ण: यदि आपके पास अन्य मार्ग हैं और आप कैच-ऑल को हस्तक्षेप नहीं करना चाहते हैं, तो आपको इसे अंत में रखना चाहिए। उदाहरण के लिए:
पहले से परिभाषित को छोड़कर सभी मार्गों को पकड़ना
Route::get('login', 'AuthController@login');
Route::get('logout', 'AuthController@logout');
Route::get('home', 'HomeController@home');
// The catch-all will match anything except the previous defined routes.
Route::any('{catchall}', 'CatchAllController@handle')->where('catchall', '.*');
उन्हें घोषित किए जाने के क्रम में मार्गों का मिलान किया जाता है
यह लारवेल मार्गों के साथ एक आम गोछा है। जिस क्रम से उन्हें घोषित किया जाता है, उसी क्रम में मार्गों का मिलान किया जाता है। पहला मिलान मार्ग वह है जिसका उपयोग किया जाता है।
यह उदाहरण उम्मीद के मुताबिक काम करेगा:
Route::get('/posts/{postId}/comments/{commentId}', 'CommentController@show'); Route::get('/posts/{postId}', 'PostController@show');
/posts/1/comments/1
लिए एक अनुरोध प्राप्त करें CommentController@show
आह्वान करेंगे। /posts/1
लिए एक अनुरोध PostController@show
आह्वान करेंगे।
हालाँकि, यह उदाहरण एक ही तरीके से काम नहीं करेगा:
Route::get('/posts/{postId}', 'PostController@show'); Route::get('/posts/{postId}/comments/{commentId}', 'CommentController@show');
/posts/1/comments/1
लिए एक अनुरोध प्राप्त करें PostController@show
आह्वान करेंगे। /posts/1
लिए एक अनुरोध PostController@show
आह्वान करेंगे।
क्योंकि लारवेल पहले मिलान मार्ग का उपयोग करता है, अनुरोध /posts/1/comments/1
मैच Route::get('/posts/{postId}', 'PostController@show');
और वैरिएबल $postId
को वैल्यू 1/comments/1
असाइन करता है। इसका मतलब है कि CommentController@show
को कभी भी आमंत्रित नहीं किया जाएगा।
केस-असंवेदनशील मार्ग
लारवेल में रूट केस-संवेदी हैं। इसका मतलब है कि एक मार्ग जैसा
Route::get('login', ...);
करने के लिए एक GET अनुरोध से मेल खाएगी /login
लेकिन करने के लिए एक GET अनुरोध से मेल नहीं खाएगी /Login
।
अपने मार्गों को मामला-असंवेदनशील बनाने के लिए, आपको एक नया सत्यापनकर्ता वर्ग बनाने की आवश्यकता है जो निर्धारित मार्गों के विरुद्ध अनुरोधित URL से मेल खाए। नए सत्यापनकर्ता और मौजूदा के बीच एकमात्र अंतर यह है कि यह केस-असंवेदनशील मिलान को सक्षम करने के लिए संकलित मार्ग के लिए नियमित अभिव्यक्ति के अंत में i संशोधक को जोड़ देगा।
<?php namespace Some\Namespace;
use Illuminate\Http\Request;
use Illuminate\Routing\Route;
use Illuminate\Routing\Matching\ValidatorInterface;
class CaseInsensitiveUriValidator implements ValidatorInterface
{
public function matches(Route $route, Request $request)
{
$path = $request->path() == '/' ? '/' : '/'.$request->path();
return preg_match(preg_replace('/$/','i', $route->getCompiled()->getRegex()), rawurldecode($path));
}
}
अपने नए सत्यापनकर्ता का उपयोग करने के लिए लारवेल के लिए, आपको उन मिलानकर्ताओं की सूची को अपडेट करना होगा जो URL को रूट से मिलान करने के लिए उपयोग किए जाते हैं और मूल UriValidator को अपने साथ प्रतिस्थापित करते हैं।
ऐसा करने के लिए, अपने मार्गों के शीर्ष पर निम्न जोड़ें।
<?php
use Illuminate\Routing\Route as IlluminateRoute;
use Your\Namespace\CaseInsensitiveUriValidator;
use Illuminate\Routing\Matching\UriValidator;
$validators = IlluminateRoute::getValidators();
$validators[] = new CaseInsensitiveUriValidator;
IlluminateRoute::$validators = array_filter($validators, function($validator) {
return get_class($validator) != UriValidator::class;
});
यह मूल सत्यापनकर्ता को हटा देगा और आपका सत्यापनकर्ताओं की सूची में जोड़ देगा।