लारवेल मार्ग तैयार करने में असमर्थ ... क्रमांकन के लिए। क्लोजर का उपयोग करता है


85

जब मैं अपने Laravel 5.2 प्रोजेक्ट में कैश साफ़ करता हूं, तो मुझे यह त्रुटि संदेश दिखाई देता है:

[LogicException] क्रमांकन के लिए मार्ग [पैनल] तैयार करने में असमर्थ। क्लोजर का उपयोग करता है।

मुझे लगता है कि यह एक मार्ग से संबंधित है

Route::get('/article/{slug}', 'Front@slug');

मेरे नियंत्रक में एक विशेष विधि से जुड़ा:

public function slug($slug) {
    $article = Article::where('slug',$slug)->first();

    $id = $article ->id_article ;

    if ( ($article=== null) || (is_null($id)) ) return view('errors/Db');

    else return view('detail')->with(array('article'=> $article,  'title'=>'My title - '.$article->title)); 
}`

संक्षेप में, एक मास्टर दृश्य से मैं $ स्लग पास करता हूं, जो कि $ स्लग के साथ लेख के लिए एक शालिंक है, जो डेटाबेस में अद्वितीय है, मैं रिकॉर्ड की पहचान करता हूं और फिर मैं इसे विस्तार से देखने के लिए सामग्री देता हूं।

मुझे कोई समस्या नहीं थी जब मैंने विधि लिखी थी, तो इसे एक आकर्षण की तरह काम किया था, लेकिन जब मैंने कैश को साफ किया, तो मुझे वह त्रुटि मिलती है और मास्टर व्यू में लिंक किसी भी शोर्ट को नहीं दिखाते हैं।

मैं कहाँ गलत कर रहा हूँ?


कृपया अपने प्रश्न को अपने बाकी मार्गों (विशेष रूप से पैनल मार्ग) को शामिल करने के लिए संपादित करें
क्रिस फॉरेन्स

जवाबों:


134

मुझे लगता है कि यह एक मार्ग से संबंधित है

Route::get('/article/{slug}', 'Front@slug');

मेरे नियंत्रक में एक विशेष विधि से जुड़ा:

नहीं, यह नहीं है। त्रुटि संदेश route:cacheकमांड से आ रहा है , यह निश्चित नहीं है कि कैश को साफ करने के कारण यह स्वचालित रूप से कॉल क्यों करता है।

समस्या एक मार्ग है जो नियंत्रक के बजाय एक बंद का उपयोग करता है, जो कुछ इस तरह दिखता है:

//                       Thats the Closure
//                             v 
Route::get('/some/route', function() {
    return 'Hello World';
});

चूँकि क्लोज़र को क्रमबद्ध नहीं किया जा सकता है, आप अपने मार्गों को कैश नहीं कर सकते जब आपके पास रूट होते हैं जो क्लोजर का उपयोग करते हैं।


3
इसलिए कमांड => php कारीगर मार्ग: कैश लार्वा पर काम नहीं कर रहा है? एक दोष?
रॉस्पिन

3
@robspin मुझे नहीं लगता कि यह एक बग है, क्योंकि यह स्पष्ट रूप से लारवेल डॉक्स में कहा जाता है laravel.com/docs/5.7/deployment#optimization (रूट का अनुकूलन रूट की जाँच करें चेक करें)
अनातोली

4
चूंकि यह सुविधा PHP क्रमांकन का उपयोग करती है, आप केवल अनुप्रयोगों के लिए मार्गों को कैश कर सकते हैं जो विशेष रूप से नियंत्रक आधारित मार्गों का उपयोग करते हैं। PHP क्लोजर को क्रमबद्ध करने में सक्षम नहीं है। तो php कारीगर मार्ग का उपयोग न करें: कैश सही तरीका है! बस php कारीगर कैश का उपयोग करें: स्पष्ट
robspin

2
तो, कोई समाधान?
zukijuki

1
नीचे IBRAHIM EZZAT समाधान देखें। अपने मार्ग फ़ाइलों में नियंत्रक विधियों के साथ किसी भी क्लोजर को बदलने की आवश्यकता है
एलिस्टेयर आर

52

यदि आपके किसी भी रूट में क्लोजर नहीं हैं, लेकिन आपको अभी भी यह त्रुटि मिल रही है, तो कृपया देखें

मार्गों / api.php

ऊपर की फ़ाइल में लारवेल का एक डिफ़ॉल्ट सामान्य एपी मार्ग है।

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

यदि आवश्यक हो तो टिप्पणी की जा सकती है या कॉल को नियंत्रक विधि से बदला जा सकता है।


37

यह निश्चित रूप से एक बग है। Laravel मार्गों / api.php में पूर्वनिर्धारित कोड प्रदान करता है

Route::middleware('auth:api')->get('/user', function (Request $request) { 
     return $request->user(); 
});

जिसके द्वारा संसाधित किया जाना अक्षम है:

php artisan route:cache

यह निश्चित रूप से लारवेल टीम द्वारा तय किया जाना चाहिए। ( लिंक की जाँच करें ),

बस अगर आप इसे ठीक करना चाहते हैं तो आपको कुछ चीजों के साथ मार्गों को api.php कोड बदलना चाहिए:

Route::middleware('auth:api')->get('/user', 'UserController@AuthRouteAPI');

और UserController में इस विधि को रखा:

 public function AuthRouteAPI(Request $request){
    return $request->user();
 }

2
वास्तव में एक बग की तरह लगता है। यदि वे मार्गों में क्लोजर का उपयोग करना संभव बनाते हैं, तो उन्हें कारीगर कमांड को ठीक करना चाहिए ताकि वे कम से कम कोई त्रुटि न दें।
Arno van Oordt

यहां प्रासंगिक पीआर है, जिसे बंद कर दिया गया था :( github.com/laravel/laravel/pull/4601
विलियम तुर्रे

7

इस समस्या का वास्तविक समाधान web.php में पहली पंक्ति बदल रहा है

बस स्वागत मार्ग को निम्नलिखित मार्ग से बदलें

Route::view('/', 'welcome');

यदि आप अभी भी प्रोब की तुलना में एक ही त्रुटि प्राप्त कर रहे हैं


6

अपने मार्गों / web.php और मार्गों / api.php की जाँच करें

Laravel मार्गों / web.php में डिफ़ॉल्ट मार्ग बंद होने के साथ आता है:

Route::get('/', function () {
    return view('welcome');
});

और मार्ग / api.php

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

यदि आप उसे हटा देते हैं तो मार्ग कैश साफ़ करने के लिए फिर से प्रयास करें।


4

जब हम इस तरह से मार्गों का उपयोग करते हैं, तो दहन:

Route::get('/', function () {
    return view('welcome');
});

लार्वा उन्हें बंद करने के लिए कहता है ताकि आप मार्गों का उपयोग न कर सकें इसलिए क्लोजर के रूप में मार्गों का उपयोग किया जाता है php artisan optimize


2

अगर कोई अभी भी उत्तर की तलाश में है, तो मेरे लिए समस्या मार्गों / web.php फ़ाइल में थी। उदाहरण:

Route::get('/', function () {
    return view('welcome');
});

यह रूट भी है, तो हाँ ... बस इसे हटा दें अगर ज़रूरत नहीं है और आप जाने के लिए अच्छे हैं! आपको ऊपर दिए गए उत्तरों का भी पालन करना चाहिए।


1
हाय अलाइन माटोस, कोई बात नहीं। मुझे यह जानने में पूरा दिन लग गया कि क्या गलत है ... खुशी है कि इससे मदद मिली।
DM

4
क्या होगा अगर इसकी आवश्यकता है?
अज़ीज़

1
@ अजीज इसे एक कंट्रोलर में ले जाएं
बिनर वेब

0

जांचें कि आपकी web.php फ़ाइल में यह एक्सटेंशन है

use Illuminate\Support\Facades\Route;

मेरी समस्या इस तरह से तय हो गई।

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