Laravel पृष्ठ पर अंक लगाना अन्य GET मापदंडों को शामिल नहीं करता है


102

मैं लारवेल 4 के पेजिनेशन क्लास के साथ एलोकेंट का उपयोग कर रहा हूं।

समस्या: जब URL में कुछ GET पैरामीटर होते हैं, उदाहरण के लिए: http://site.com/users?gender=female&body=hotउत्पन्न किए गए पृष्ठ लिंक केवल होते हैंpage पैरामीटर और कुछ नहीं।

ब्लेड टेम्पलेट

{{ $users->link() }}

इसके ->append()लिए एक फ़ंक्शन है, लेकिन जब हमें पता नहीं है कि कितने GET पैरामीटर हैं, तो हम अपने ब्लेड टेम्प्लेट को गड़बड़ाने वाले कोड के append()पूरे समूह के बिना पेजेंट लिंक में अन्य GET मापदंडों को शामिल करने के लिए कैसे उपयोग कर सकते हैं if?

जवाबों:


121

EDIT: इस काम को करने के लिए मेहदी के जवाब के साथ कॉनर की टिप्पणी आवश्यक है। उनकी स्पष्टीकरण के लिए दोनों को धन्यवाद।

->appends()एक सरणी को एक पैरामीटर के रूप में स्वीकार कर सकते हैं, आप पास कर सकते हैं Input::except('page'), जो कि चाल करना चाहिए।

उदाहरण:

return view('manage/users', [
    'users' => $users->appends(Input::except('page'))
]);

37
इस तरह आने वाले अन्य गोगलर्स के लिए बस ध्यान दें - यह अब बहुवचन है appends, नहीं append । सही चैनिंग कुछ इस तरह होगी$query->appends($foo)->links();
कॉनर पीट

6
मैंने पाया कि $query->appends(Input::except('page'))->links();बेहतर काम किया है। अन्यथा, जब आप पृष्ठ पर क्लिक करते हैं तो पृष्ठ चर अपडेट नहीं होता था। लारवेल 4.1.24।
बिटलेर

... और फिर मैंने मेहदी का हल देखने के लिए नीचे स्क्रॉल किया।
बिटलेर

2
LARAVEL 5: {!! $myItems->appends(Input::except('page'))->render() !!}
ecairol

2
लार्वा 5.2 में आपको इनपुट के बजाय रिक्वेस्ट का इस्तेमाल करना चाहिए
क्रिस्टोफव

104

मुझे लगता है कि आपको लारवेल 5 में इस कोड का उपयोग करना चाहिए। इसके अलावा यह न केवल पैरामीटर के साथ pageबल्कि किसी अन्य पैरामीटर के साथ भी काम करेगा :

$users->appends(request()->input())->links();

व्यक्तिगत रूप से, मैं Facadesजितना संभव हो उतना उपयोग करने से बचने की कोशिश करता हूं। वैश्विक सहायक कार्यों का उपयोग कम कोड और बहुत सुंदर है।

अपडेट करें:

Inputफैराडे का उपयोग न करें क्योंकि यह लारवेल v6 + में अपदस्थ है


2
यह लार्वा 5.6 के लिए काम किया, स्वीकृत उत्तर समाधान का उपयोग करके मेरे लिए एक त्रुटि का कारण बना।
मुहम्मद अज़ीज़

1
मैंने इसे 5.3 प्रोजेक्ट पर सफलतापूर्वक लागू किया; मैं इस सरल विधि को पसंद करता हूं
kjones

3
इसके अलावा, मैंने देखा है कि आपको except('page')इस समाधान के साथ उपयोग करने की आवश्यकता नहीं है ।
BakerStreetSystems

1
बहुत मददगार। धन्यवाद
विराज Amarasinghe

40

इसके बारे में जागरूक रहेंInput::all() , यह ?page=आपके द्वारा खोले गए प्रत्येक पृष्ठ में बार-बार पिछले मूल्यों को शामिल करेगा !
उदाहरण के लिए यदि आप अंदर हैं ?page=1और आप अगला पृष्ठ खोलते हैं, ?page=1&page=2
तो यह खुल जाएगा इसलिए अंतिम मूल्य पृष्ठ वह पृष्ठ होगा जो आप देखते हैं! वह पृष्ठ नहीं जिसे आप देखना चाहते हैं

समाधान: उपयोग Input::except(array('page'))


39

आप उपयोग कर सकते हैं

->appends(request()->query())

नियंत्रक में उदाहरण:

$users = User::search()->order()->with('type:id,name')
    ->paginate(30)
    ->appends(request()->query());

return view('users.index', compact('users'));

उदाहरण में देखें:

{{ $users->appends(request()->query())->links() }}

3
यह मोहम्मद सईद (लारवेल कर्मचारी) द्वारा सुझाया गया तरीका है, देखें: github.com/laravel/framework/issues/…
रॉय

1
मुझे लगता है कि यह सबसे अच्छा जवाब है क्योंकि @ ट्रॉय ने कहा + बेहतर उदाहरण। साथ ही इसका नियंत्रक उदाहरण + दृश्य उदाहरण है।
मकी

2
मेरे लिए काम किया। +1
मनोज कुमार

1
यह सबसे अच्छा समाधान है, इसने मेरे लिए भी काम किया
जेथिन

28

ऐसा नहीं है, append()लेकिन appends() सही उत्तर है:

{!! $records->appends(Input::except('page'))->links() !!}

11

लारवल ५

दृश्य में कुछ ऐसा होना चाहिए:

{!! $myItems->appends(Input::except('page'))->render() !!}


5

इस इनपुट का उपयोग करें, सभी इनपुट पैरामेट्स लेकिन पेज रखने के लिए

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}

क्यों?

1) तुम सब कुछ है कि इस तरह अनुरोध करने के लिए जोड़ा नीचे पट्टी

  $request->request->add(['variable' => 123]);

2) आपको फ़ंक्शन के लिए इनपुट पैरामीटर के रूप में $ अनुरोध की आवश्यकता नहीं है

3) आप "पृष्ठ" को बाहर कर रहे हैं

PS) और यह लारवेल 5.1 के लिए काम करता है



4

ब्लेड में 5 या उससे अधिक में कौन है:

{{ $table->appends(['id' => $something ])->links() }}

आप के साथ पारित आइटम प्राप्त कर सकते हैं

$passed_item=$request->id;

इसके साथ परीक्षण करें

dd($passed_item);

आपको $ कुछ मूल्य मिलना चाहिए


1

Laravel 7.x ने पेजिनेटर में नई विधि जोड़ी है:

->withQueryString()

तो आप इसका उपयोग कर सकते हैं जैसे:

{{ $users->withQueryString()->links() }}

7. नीचे उपयोग के लिए लार्वा के लिए:

{{ $users->appends(request()->query())->links() }}

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