2015-10-05 12 views
8

मैं $year वैरिएबल चाहता हूं कि मेरे PagesController के सभी कार्यों में उपलब्ध हो। मैंने इस कोड की कोशिश की लेकिन मैं सफल नहीं हुआ।लार्वेल नियंत्रक में वैश्विक चर

class PagesController extends Controller 
{ 
    public function __construct() 
    { 
     $dt = Carbon::parse(); 
     $year = $dt->year; 
    } 

    public function index() 
    { 
     return view('pages.index'); 
    } 

    public function about() 
    { 
     return view('pages.about', compact('year')); 
    } 

    public function create() 
    { 
     return view('pages.create', compact('year')); 
    } 
} 

उत्तर

17

1. विकल्प घटना से पहले अनुप्रयोग के भीतर :: एक वैश्विक सिंगलटन बना सकते हैं: AppServiceProvider

उपयोग में यह मामला $ 2015 सभी विचारों के लिए उपलब्ध है!

<?php 

namespace App\Providers; 

use Carbon; 

class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     view()->share('year', Carbon::parse()->year); 
    } 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

2. विकल्प: एक View Composer

का प्रयोग करें इस मामले में, चर केवल विचारों जहां आप इसे जरूरत के लिए उपलब्ध है।

नव निर्मित प्रदाता को config/app.php पर जोड़ने के लिए मत भूलना!

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use Carbon; 

class ComposerServiceProvider extends ServiceProvider 
{ 
    /** 
    * Register bindings in the container. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // Using Closure based composers... 
     view()->composer('pages.*', function ($view) { 
      $view->with('year', Carbon::parse()->year); 
     }); 
    } 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

3. ब्लेड का प्रयोग करें @inject-method

विचारों साल की जरूरत है कि आप इस तरह एक कार्बन उदाहरण इंजेक्षन सकता है के भीतर:

@inject('carbon', 'Carbon\Carbon') 

{{ $carbon->parse()->year }} 
+0

हैलो laravel करने के लिए नए im। मैं पहले विकल्प का उपयोग कैसे कर सकता हूं। क्या मुझे पृष्ठों में कुछ घोषित करने की आवश्यकता है नियंत्रक.एफ़.पी. क्योंकि मुझे "अपरिभाषित चर: वर्ष" की त्रुटि मिली है। पीएस मैं लार्वेल 5 – Nixxx27

+0

का उपयोग कर रहा हूं यदि आपने कोड को आपके 'AppServiceProvider' में वर्णित किया है, तो आपको कुछ और करने की आवश्यकता नहीं है। इस त्रुटि को फेंक रहा है क्या? – Tim

+0

मैं इसका उपयोग करता हूं .. ( { $ वर्ष वापसी; } और त्रुटि अपरिभाषित चर है: वर्ष। मैंने आपके कोड की प्रतिलिपि बनाई और पेस्ट किया। – Nixxx27

4

इस प्रयास करें:

//give private declaration 
private $year; 
public function __construct() 
{ 
    $dt = Carbon::parse(); 
    $this->year = $dt->year; 
} 

public function index() 
{ 
    return view('pages.index'); 
} 

public function about() 
{ 
    $year = $this->year; 
    return view('pages.about',compact('year')); 
} 

public function create() 
{ 
    $year = $this->year; 
    return view('pages.create',compact('year')); 
} 
4

आप

App::before(function($request) { 
    App::singleton('customYear', function(){ 
     $dt = Carbon::parse(); 
     $customYear = $dt->year; 
     return $customYear; 
    }); 

    // If you use this line of code then it'll be available in any view 
    View::share('customYear', app('customYear')); 

    //To get the same data in any controller you may use: 
    $customYear = app('customYear'); 
}); 
संबंधित मुद्दे