php हरण एक ही मार्ग समूह के साथ एकाधिक उपसर्ग




संस्कृति का उपसर्ग (7)

im एक स्कूल के लिए एक काफी सरल वेबसाइट लिख रहा है ... इस वेबसाइट के समाचार, लेख, वीडियो क्लिप ... आदि है

जिस तरह से यह काम करता है वह होम पेज में हम आगंतुक को कुछ सबक के साथ प्रस्तुत करते हैं जैसे

>math 
>geography 
>chemistry 

उपयोगकर्ता इन पर 1 का चयन करता है और उपयोगकर्ता चयन के आधार पर वेबसाइट की सामग्री में बदलाव करता है

उदाहरण के लिए यदि उपयोगकर्ता गणित का चयन करता है तो वह समाचार, आलेख, गणित के बारे में वीडियो और इसी तरह देखेंगे ... अभी यह है कि मैं क्या कर रहा हूं (वाक्यविन्यास त्रुटियों की अनदेखी करना)

Route::group(['prefix'=>'math'], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

Route::group(['prefix'=>'geography'], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

Route::group(['prefix'=>'chemistry'], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

मूल रूप से प्रत्येक उपसर्ग के लिए सभी लिंक दोहराते हैं .... लेकिन जैसे ही लिंक बढ़ते हैं, यह अधिक से अधिक असुविधाजनक हो जाएगा ... क्या ऐसा करने का कोई बेहतर तरीका है? कुछ इस तरह

Route::group(['prefix'=>['chemistry','math' , 'geography' ], function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
});

------------------------- अद्यतन करें -------------

मैंने यह कोशिश की है

$myroutes =  function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
};

Route::group(['prefix' => 'chemistry'], $myroutes);
Route::group(['prefix' => 'math'], $myroutes);
Route::group(['prefix' => 'geography'], $myroutes);

और यह ठीक काम करता है, समस्या अंतिम उपसर्ग सभी आंतरिक लिंक से जुड़ी होती है

उदाहरण के लिए अगर मैं गणित पर क्लिक करता हूँ

मेरे लिंक हो जाएगा

site.com/math/news

लेकिन लोड किए गए पृष्ठ पर सभी लिंक्स जैसे जैसे

<a href="{{route('article_index')"> link to article </a>

हमशक्ल

site.com/geography/article

मूल रूप से लिंक वर्तमान में चयनित एक की परवाह किए बिना अंतिम उल्लेखित उपसर्ग प्राप्त करें


मुझे लगता है कि यह करना बेहतर है:

Route::get('/news/{group}', '[email protected]')->name('news_index');

और फिर नियंत्रक समारोह पर बस शर्त रखो कि क्या यह भूगोल / गणित / रसायन विज्ञान / आदि है।

क्या आपको नहीं लगता?


समूह के बजाय आप मार्ग पैरामीटर का उपयोग कर सकते हैं

Route::get('/{prefix}/news', '[email protected]')->name('news_index');
Route::get('/{prefix}/article', '[email protected]')->name('article_index');

आप रूट समूह वाइल्डकार्ड और अपने RouteServiceProvider में पसंदीदा उपसर्ग निर्दिष्ट कर सकते हैं

routes.php

Route::group(['prefix'=>'{slug}'],function (){
 Route::get('/news', '[email protected]')->name('news_index');
 Route::get('/article', '[email protected]')->name('article_index');
});

रूट सेवा सेवा प्रदाता बूट विधि

Route::bind('slug',function ($name){
   $prefix = ["math","chemistry","geography"];
    if(!in_array($name,$prefix))
     {
        //handle wrong prefixes
        throw new \Exception("Something went wrong");
     }
 });

नामित मार्ग का उपयोग करें

{{route('news_index',['slug'=>'math'])}}


आप निम्न प्रयास कर सकते हैं:

$myroutes =  function () {
    Route::get('/news', '[email protected]')->name('news_index');
    Route::get('/article', '[email protected]')->name('article_index');
};

Route::group(['prefix' => 'chemistry'], $myroutes);
Route::group(['prefix' => 'math'], $myroutes);
Route::group(['prefix' => 'geography'], $myroutes);

निम्न के रूप में प्रयोग करें:

 {!!URL::to('chemistry/news')!!}
 {!!URL::to('geography/news')!!}
 {!!URL::to('math/news')!!}

यहां पहले से ही बहुत अच्छे उत्तर दिए गए हैं, यह संभवतः व्यक्तिगत वरीयता या गहरी परियोजना विशेषताओं का मामला है जो एक सूट है। यहाँ ढेर के लिए एक और विकल्प है।

मुझे यकीन नहीं है कि @ शेम्स का जवाब कम क्यों नहीं है, यह मेरे लिए साफ दृष्टिकोण की तरह लगता है - लेकिन सिर्फ अगर उपसर्गों को सीमित कर दिया जाता है तो केवल वैध विषयों को स्वीकार किया जाता है कुछ इस तरह:

// Only 1 place to update if you add subjects
$subjectRegex = 'math|geography|chemistry';

// Only 1 route per 'group'
Route::get('{subject}/news', '[email protected]')->name('news_index')->where('subject', $subjectRegex);
Route::get('{subject}/article', '[email protected]')->name('article_index')->where('subject', $subjectRegex);

एक बोनस के रूप में आपके पास $subject नियंत्रक के तरीकों में उपलब्ध $subject है, जो लगता है कि यह उपयोगी हो सकता है, उदाहरण के लिए आप इसे वर्तमान विषय के भीतर मार्गों को बनाने के लिए उपयोग कर सकते हैं:

route('article_index', ['subject' => $subject])

ऐसा क्यों नहीं है:

$subjects = [
    'chemistry', 'geography', 'math'
];

foreach ($subjects as $subject) {
    Route::prefix($subject)->group(function () {
        Route::get('news', '[email protected]')->name('news_index');
        Route::get('article', '[email protected]')->name('article_index');
    });
}

मुझे पता है कि यह एक प्राथमिक तरीका है जो इसे करना है। फिर भी आप आसानी से विषयों को जोड़ सकते हैं, यह समझने के लिए स्पष्ट और सरल है।


आप अपने समूह के भीतर विकल्प के as उपयोग करने की कोशिश कर सकते हैं ताकि राऊटर को उस समूह के भीतर हर रूट नाम पर स्ट्रिंग में शामिल कर सकें। ऐसा करने के लिए निम्न प्रयास करें:

Route::group(['prefix' => 'chemistry', 'as' => 'chemistry.'], $myroutes);
Route::group(['prefix' => 'math', 'as' => 'math.'], $myroutes);
Route::group(['prefix' => 'geography', 'as' => 'geography.'], $myroutes);

तो आप क्या करने में सक्षम होंगे:

<a href="{{route('chemistry.article_index')}}"> link to article </a>
<a href="{{route('math.article_index')}}"> link to article </a>
<a href="{{route('geography.article_index'}})"> link to article </a>

आशा करता हूँ की ये काम करेगा।