रूटिंग
डिफ़ॉल्ट रूटिंग नियम
webman का डिफ़ॉल्ट रूटिंग नियम है http://127.0.0.1:8787/{कंट्रोलर}/{क्रिया}
।
डिफ़ॉल्ट कंट्रोलर app\controller\IndexController
है, और डिफ़ॉल्ट क्रिया index
है।
उदाहरण के लिए:
http://127.0.0.1:8787
डिफ़ॉल्ट रूप सेapp\controller\IndexController
कीindex
मेथड पर जाएगा।http://127.0.0.1:8787/foo
app\controller\FooController
कीindex
मेथड पर जाएगाhttp://127.0.0.1:8787/foo/test
app\controller\FooController
कीtest
मेथड पर जाएगाhttp://127.0.0.1:8787/admin/foo/test
app\admin\controller\FooController
कीtest
मेथड पर जाएगा (रेफर मल्टी एप)
इसके अलावा, webman 1.4 से डिफ़ॉल्ट रूटिंग का समर्थन करता है, जैसे
app
├── admin
│ └── v1
│ └── v2
│ └── v3
│ └── controller
│ └── IndexController.php
└── controller
├── v1
│ └── IndexController.php
└── v2
└── v3
└── IndexController.php
जब आप किसी विशेष अनुरोध की रूटिंग फ़ॉर्म को बदलना चाहते हैं, तो कॉन्फ़िगरेशन फ़ाइल config/route.php
को बदलें।
अगर आप डिफ़ॉल्ट रूटिंग को बंद करना चाहते हैं, तो कॉन्फ़िगरेशन फ़ाइल config/route.php
में निम्न लाइन जोड़ें:
Route::disableDefaultRoute();
क्लोजर रूटिंग
config/route.php
में निम्न रूटिंग कोड जोड़ें
Route::any('/test', function ($request) {
return response('test');
});
ध्यान दें
क्लोजर फ़ंक्शन क्योंकि किसी भी कंट्रोलर का हिस्सा नहीं होता है, इसलिए$request->app
$request->controller
$request->action
सभी स्ट्रिंग में रहते हैं।
जब पता http://127.0.0.1:8787/test
जाता है, test
स्ट्रिंग वापस लौटाता है।
ध्यान दें
रूट पथ को स्लैश (/
) से शुरू करना आवश्यक है, उदाहरण के लिए
// गलत तरीका
Route::any('test', function ($request) {
return response('test');
});
// सही तरीका
Route::any('/test', function ($request) {
return response('test');
});
कक्षा रूटिंग
config/route.php
में निम्न रूटिंग कोड जोड़ें
Route::any('/testclass', [app\controller\IndexController::class, 'test']);
पता http://127.0.0.1:8787/testclass
जाते वक़्त, app\controller\IndexController
की test
मेथड का उत्तर मिलेगा।
रूटिंग पैरामीटर
अगर रूटिंग में पैरामीटर हैं, तो {key}
का उपयोग करके मैच किया जाएगा, मैचिंग परिणाम को संबंधित कंट्रोलर मेथड पैरामीटर में पास किया जाएगा(दूसरे पैरामीटर से शुरू होकर)। उदाहरण:
// मैच करेगा /user/123 /user/abc
Route::any('/user/{id}', [app\controller\UserController::class, 'get']);
namespace app\controller;
class UserController
{
public function get($request, $id)
{
return response('पैरामीटर '.$id.' प्राप्त किया गया है');
}
}
अधिक उदाहरण:
// मैच करेगा /user/123, /user/abc मैच नहीं करेगा
Route::any('/user/{id:\d+}', function ($request, $id) {
return response($id);
});
// मैच करेगा /user/foobar, /user/foo/bar मैच नहीं करेगा
Route::any('/user/{name}', function ($request, $name) {
return response($name);
});
// मैच करेगा /user, /user/123 और /user/abc
Route::any('/user[/{name}]', function ($request, $name = null) {
return response($name ?? 'tom');
});
// सभी options अनुरोध को मैच करेगा
Route::options('[{path:.+}]', function () {
return response('');
});
रूटिंग समूह
कभी-कभी रूटिंग में बहुत सारे समान प्रिफ़िक्स होते हैं, इससे हमें रूटिंग की परिभाषा सरल करने के लिए रूटिंग समूह का इस्तेमाल कर सकते हैं। उदाहरण के लिए:
Route::group('/blog', function () {
Route::any('/create', function ($request) {return response('create');});
Route::any('/edit', function ($request) {return response('edit');});
Route::any('/view/{id}', function ($request, $id) {return response("view $id");});
});
इसका मतलब है
Route::any('/blog/create', function ($request) {return response('create');});
Route::any('/blog/edit', function ($request) {return response('edit');});
Route::any('/blog/view/{id}', function ($request, $id) {return response("view $id");});
समूह नेस्टिंग का उपयोग करना
Route::group('/blog', function () {
Route::group('/v1', function () {
Route::any('/create', function ($request) {return response('create');});
Route::any('/edit', function ($request) {return response('edit');});
Route::any('/view/{id}', function ($request, $id) {return response("view $id");});
});
});
रूटिंग मिडलवेयर
हम किसी एक या किसी ग्रुप रूटिंग को मिडलवेयर सेट कर सकते हैं।
उदाहरण के लिए:
Route::any('/admin', [app\admin\controller\IndexController::class, 'index'])->middleware([
app\middleware\MiddlewareA::class,
app\middleware\MiddlewareB::class,
]);
Route::group('/blog', function () {
Route::any('/create', function () {return response('create');});
Route::any('/edit', function () {return response('edit');});
Route::any('/view/{id}', function ($request, $id) {response("view $id");});
})->middleware([
app\middleware\MiddlewareA::class,
app\middleware\MiddlewareB::class,
]);
ध्यान दें:
webman-framework <= 1.5.6 के बाद->middleware()
रूट मिडलवेयर ग्रुप समूह के बाद कार्य करता है, तो वर्तमान रूट को वर्तमान समूह के अंदर प्राप्त होना आवश्यक है।
# गलत उपयोग (webman-framework >= 1.5.7 में यह उपयोग वैध होता है)
Route::group('/blog', function () {
Route::group('/v1', function () {
Route::any('/create', function ($request) {return response('create');});
Route::any('/edit', function ($request) {return response('edit');});
Route::any('/view/{id}', function ($request, $id) {return response("view $id");});
});
})->middleware([
app\middleware\MiddlewareA::class,
app\middleware\MiddlewareB::class,
]);
# सही उपयोग
Route::group('/blog', function () {
Route::group('/v1', function () {
Route::any('/create', function ($request) {return response('create');});
Route::any('/edit', function ($request) {return response('edit');});
Route::any('/view/{id}', function ($request, $id) {return response("view $id");});
})->middleware([
app\middleware\MiddlewareA::class,
app\middleware\MiddlewareB::class,
]);
});
संसाधन प्रकार रूटिंग
Route::resource('/test', app\controller\IndexController::class);
// संसाधन रूटिंग का निर्दिष्टन
Route::resource('/test', app\controller\IndexController::class, ['index','create']);
// निर्धारित नस्तस्य संसाधन रूटिंग
// जैसे notify का पता /test/notify या /test/notify/{id} हो सकता है या routeName का test.notify
Route::resource('/test', app\controller\IndexController::class, ['index','create','notify']);
Verb | URI | Action | Route Name |
---|---|---|---|
GET | /test | index | test.index |
GET | /test/create | create | test.create |
POST | /test | store | test.store |
GET | /test/{id} | show | test.show |
GET | /test/{id}/edit | edit | test.edit |
PUT | /test/{id} | update | test.update |
DELETE | /test/{id} | destroy | test.destroy |
PUT | /test/{id}/recovery | recovery | test.recovery |
url उत्पन्न
ध्यान दें
ग्रुप नेस्टिंग की रूटिंग उत्पन्न करने का अभी समर्थन नहीं है
उदाहरण के लिए रूटिंग:
Route::any('/blog/{id}', [app\controller\BlogController::class, 'view'])->name('blog.view');
हम इस रूटिंग के लिए निम्न तरीके से url उत्पन्न कर सकते हैं।
route('blog.view', ['id' => 100]); // परिणाम /blog/100 होगा
रूटिंग का url उपयोग करते समय इस तरह का उपयोग कर सकते हैं, इससे वेब रूट के किनारे के बदलाव से यह स्वत: उत्पन्न हो जाएगा, जिससे स्थिति फ़ाइलों को बदलने के कारण बड़ी संख्या में दृश्य फ़ाइलों का बदलाव रिक्त हो सकता है।
पथ प्राप्त करें
नोट:
webman-framework >= 1.3.2 आवश्यक है
$request->route
ऑब्जेक्ट के माध्यम से हम वर्तमान अनुरोध के रूट की जानकारी प्राप्त कर सकते हैं, जैसे
$route = $request->route; // $route = request()->route; के समान
if ($route) {
var_export($route->getPath());
var_export($route->getMethods());
var_export($route->getName());
var_export($route->getMiddleware());
var_export($route->getCallback());
var_export($route->param()); // यह सुविधा webman-framework >= 1.3.16 की आवश्यकता है
}
नोट:
यदि वर्तमान अनुरोध config/route.php में किसी भी रूट से मेल नहीं खाता है, तो$request->route
null होगा, अर्थात डिफ़ॉल्ट रूट को चलाने पर$request->route
null होगा।
404 संसाधित करना
जब रूट नहीं मिलता है तो डिफ़ॉल्ट रूट public/404.html
फ़ाइल की सामग्री डाल कर 404 स्थिति को लौटाया जाता है।
यदि डेवलपर को रूट नहीं मिलने पर रूट प्राप्त नहीं होते वाली व्यवस्था में हस्तक्षेप करना चाहते हैं, तो वेबमैन द्वारा प्रदान की गई फिर रूट Route::fallback($callback)
विधि का उपयोग किया जा सकता है। उदाहरण के तौर पर नीचे की गई कोड तर्क है जब रूट नहीं मिलता है तो होमपेज पर रीडायरेक्ट करें।
Route::fallback(function(){
return redirect('/');
});
एक और उदाहरण के रूप में, रूट नहीं मिलने पर एक json डेटा लौटाना, जो वेबमैन को API इंटरफ़ेस के रूप में बहुत उपयोगी होता है।
Route::fallback(function(){
return json(['code' => 404, 'msg' => '404 not found']);
});
संबंधित लिंक कस्टम 404 500 पेज
रूट इंटरफ़ेस
// $uri के किसी भी मेथड अनुरोध के रूट सेट करें
Route::any($uri, $callback);
// $uri के get अनुरोध के रूट सेट करें
Route::get($uri, $callback);
// $uri के किसी भी अनुरोध के रूट सेट करें
Route::post($uri, $callback);
// $uri के put अनुरोध के रूट सेट करें
Route::put($uri, $callback);
// $uri के पैच अनुरोध के रूट सेट करें
Route::patch($uri, $callback);
// $uri के डिलीट अनुरोध के रूट सेट करें
Route::delete($uri, $callback);
// $uri के हेड अनुरोध के रूट सेट करें
Route::head($uri, $callback);
// एक साथ कई प्रकार के अनुरोध प्रकार के रूट सेट करें
Route::add(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'], $uri, $callback);
// समूह रूट
Route::group($path, $callback);
// संसाधित रूट
Route::resource($path, $callback, [$options]);
// रूट अक्षम करें
Route::disableDefaultRoute($plugin = '');
// फिर रूट, डिफ़ॉल्ट रूट को पूरा करने के लिए
Route::fallback($callback, $plugin = '');
यदि uri के कोई भी रूट (डिफ़ॉल्ट रूट सहित) नहीं है, और फिर रूट भी सेट नहीं है, तो 404 लौटाया जाएगा।
विभिन्न रूट कॉन्फ़िग फ़ाइल
यदि आप रूट को प्रबंधित करने के लिए विभिन्न रूट कॉन्फ़िग फ़ाइल का उपयोग करना चाहते हैं, उदाहरण के लिए बहु-अनुप्रयोग में हर अनुप्रयोग के नीचे अपनी रूट कॉन्फ़िग फ़ाइल होती है, इससे आप बाहरी रूट कॉन्फ़िग फ़ाइल को require
करने के रूप में उपयोग कर सकते हैं।
उदाहरण के लिए config/route.php
में
<?php
// ऐडमिन अनुप्रयोग के रूट कॉन्फ़िग लोड करें
require_once app_path('admin/config/route.php');
// एपीआई अनुप्रयोग के रूट कॉन्फ़िग लोड करें
require_once app_path('api/config/route.php');