2015-04-18 7 views
40

मैं लैरवेल 5 में ग्लोबल वैरिएबल कैसे बना सकता हूं जो सभी ब्लेड टेम्पलेट्स में उपलब्ध होगा?लार्वेल 5 - वैश्विक ब्लेड व्यू वेरिएबल सभी टेम्पलेट्स में उपलब्ध

+8

http://laravel.com/docs/5.0/views#view-composers इस और 'दृश्य() के बीच – lukasgeiter

उत्तर

60

विकल्प 1:

आप view::share() इसलिए की तरह उपयोग कर सकते हैं:

<?php namespace App\Http\Controllers; 

use View; 

//You can create a BaseController: 

class BaseController extends Controller { 

    public $variable1 = "I am Data"; 

    public function __construct() { 

     $variable2 = "I am Data 2"; 


     View::share ('variable1', $this->variable1); 
     View::share ('variable2', $variable2); 
     View::share ('variable3', 'I am Data 3'); 
     View::share ('variable4', ['name'=>'Franky','address'=>'Mars']); 
    } 

} 

class HomeController extends BaseController { 

    //if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so: 

    public function __construct(){ 
     parent::__construct(); 
    } 

    public function Index(){ 
     //All variable will be available in views 
     return view('home'); 
    } 

} 

विकल्प 2:

  1. app\Composers\HomeComposer.php
  2. पर एक संगीतकार फ़ाइल बनाएँ: एक संगीतकार
    उपयोग

एनबी: app\Composers बनाने अगर यह नहीं मौजूद है करता

<?php namespace App\Composers; 

class HomeComposer 
{ 

    public function compose($view) 
    { 
     //Add your variables 
     $view->with('variable1',  'I am Data') 
      ->with('variable2',  'I am Data 2'); 
    } 
} 

तो फिर तुम इस

<?php namespace App\Http\Controllers; 

use View; 

class HomeController extends Controller{ 


    public function __construct(){ 

     View::composers([ 
      'App\Composers\HomeComposer' => ['home'] //attaches HomeComposer to home.blade.php 
     ]); 

    } 

    public function Index(){ 
     return view('home'); 
    } 

} 
+1

आपकी प्रतिक्रिया ने वास्तव में मुझे विकल्प 1 के साथ मदद की, हालांकि यदि आप '$ user = Auth :: उपयोगकर्ता(); 'तक पहुंचने का प्रयास कर रहे हैं, और शीर्षलेख और सामग्री भाग सहित सभी ब्लेड टेम्पलेट्स में $ उपयोगकर्ता चर को पास करें ? मैंने बेसकंट्रोलर में $ उपयोगकर्ता चर डालने और फिर इसे साझा करके इसे आजमाया, लेकिन यदि मैं var_dump $ उपयोगकर्ता को सरणी में संरक्षित मानों का एक गुच्छा प्राप्त करता हूं। असल में मैं सभी टेम्पलेट्स और विचारों में ऐप में सभी ऑथ उपयोगकर्ता चरों तक पहुंचने में सक्षम होना चाहता हूं। सरल लगता है लेकिन इसे समझने के लिए घंटों बिताए हैं। –

+1

वास्तव में यह काम किया: ' 'लेकिन यह काम नहीं किया: '{{$ user-> name}}' –

+0

@ चाड प्रिडल यह एक सरणी '{{$ उपयोगकर्ता [' नाम ']}} के लिए काम करना चाहिए, जबकि यह किसी ऑब्जेक्ट के लिए काम करता है '{{$ उपयोगकर्ता-> नाम}}' – Digitlimit

6

आप इसे view composers के साथ कर सकते हैं। टेम्पलेट लोड होने पर संगीतकार निष्पादित होते हैं। आप उस दृश्य के लिए अतिरिक्त कार्यक्षमता के साथ क्लोजर में पास कर सकते हैं। दृश्य संगीतकारों के साथ आप वाइल्डकार्ड का उपयोग कर सकते हैं। प्रत्येक दृश्य के लिए दृश्य संगीतकार बनाने के लिए बस * का उपयोग करें।

View::composer('*', function($view) 
{ 
    $view->with('variable','Test value'); 
}); 

आप दस्तावेज़ों में बंद होने के बिना इसे भी बंद कर सकते हैं।

View::composer('*', 'App\Http\ViewComposers\ProfileComposer'); 

प्रोफ़ाइल संगीतकार वर्ग में एक रचना विधि होनी चाहिए।

देखें जब दृश्य प्रस्तुत किया जाता है तो संगीतकार निष्पादित होते हैं। लार्वेल ने रचनाकारों को भी देखा है। जब कोई दृश्य तत्काल होता है तो ये निष्पादित होते हैं।

आप सेटअप लेआउट विधि के साथ BaseController का उपयोग करना भी चुन सकते हैं। फिर आप जो भी दृश्य लोड करेंगे, उसे सेटअपआउट विधि के माध्यम से लोड किया जाता है जो कुछ अतिरिक्त डेटा जोड़ता है। हालांकि, दृश्य संगीतकारों का उपयोग करके आप निश्चित रूप से सुनिश्चित हैं कि कोड निष्पादित किया गया है। लेकिन बेसकंट्रोलर दृष्टिकोण के साथ आपके पास अधिक लचीलापन है क्योंकि आप अतिरिक्त डेटा लोड करने को छोड़ सकते हैं।

संपादित करें: निक गुतिरेज़ द्वारा वर्णित अनुसार आप व्यू शेयर का भी उपयोग कर सकते हैं।

+0

अंतर -> शेयर' यह है कि यह केवल तभी चलाया जाता है जब दृश्य का उपयोग किया जाता है - लेकिन 'व्यू() -> शेयर' के साथ यह कोई फर्क नहीं पड़ता कि आप क्या कर सकते हैं - उदाहरण के लिए आप किसी एपीआई कॉल में कुछ JSON लौट रहे हैं - जो एक दृश्य का उपयोग नहीं करता है । – Petecoop

14

Create a new Service Provider as suggested in here

कॉन्फ़िगरेशन फ़ाइल (config/app.php) करने के लिए अपने नए सेवा प्रदाता जोड़ें।

अपने नए सेवा प्रदाता का उपयोग की बूट विधि में:

View::share('something_cool', 'this is a cool shared variable'); 

अब आप अपने विचारों के सभी में $ something_cool का उपयोग करने के लिए तैयार हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

प्लस, यह 'आर्टिसन डाउन' के बाद 503 पेज पर एकाधिक अवसरों पर उपयोग किए जाने वाले ** चर के लिए अंतिम समाधान है। ** ऐप की वर्जन स्ट्रिंग को कैश बस्टर पैरामीटर के रूप में इंजेक्शन देना या अपडेट करने के दौरान इसे फ़ूटर में प्रदर्शित करना अन्य समाधानों के साथ एक कोर है । (इसके लिए एक एनवी वैरिएबल का उपयोग करना शायद सबसे साफ समाधान होगा) – luchaos

+0

यह अनुमोदित उत्तर – Christophvh

+0

से बेहतर समाधान है, मुझे लगता है कि मुख्य अंतर यह है कि उपयोगकर्ता सभी टेम्पलेट्स में * ग्लोबल * वैरिएबल उपलब्ध कराने के बारे में पूछ रहा है । स्वीकार किए गए समाधान के साथ उपयोगकर्ता को बेसकंट्रोलर का विस्तार करने और अभिभावक को कॉल करने की आवश्यकता है :: निर्माण और व्यू कॉम्पोज़र समाधान के साथ, वे चर को उपलब्ध कराने के लिए प्रत्येक नियंत्रक निर्माण विधि में व्यू :: संगीतकार को कॉल करने की आवश्यकता है। –

-6

करके किसी भी दृश्य को संगीतकार संलग्न कर सकते हैं सत्र में यह फ़्लैश कर सकते हैं, आप कर सकते हैं इसे परिभाषित करें।एनवी फ़ाइल (स्थिर vars)

8

एक ही समस्या के समाधान के लिए खोज रहे हैं और Laravel दस्तावेज़ीकरण में सबसे अच्छा समाधान मिला। बस AppServiceProvider इस तरह में View::share का उपयोग करें:

View::share('key', 'value'); 

विवरण here

1

इसके अलावा, आप Route.php फ़ाइल में ऐसा कर सकते हैं:

view()->share('variableName', $variable); 
संबंधित मुद्दे