2015-10-05 24 views
8

$year değişkenimin PagesController benim tüm işlevlerimde kullanılabilir olmasını istiyorum. Bu kodu denedim ama başaramadım.Dalga denetleyicisindeki genel değişken

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')); 
    } 
} 

cevap

17

1. Seçenek küresel singleton oluşturabilirsiniz: In AppServiceProvider

kullanın Bu durumda $ yıl TÜM görünümler için kullanılabilir!

<?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. Seçenek: Bu durumda bir View Composer

kullanın değişken İhtiyacınız görünümlere kullanılabilir.

Yeni oluşturulan sağlayıcıyı config/app.php'a eklemeyi unutmayın! Eğer böyle bir Karbon örneği enjekte edebilir yıl gerekir görünümler içinde kullanın Bıçaklar @inject-method

<?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('carbon', 'Carbon\Carbon') 

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

merhaba laravel yeni im. İlk seçeneği nasıl kullanabilirim. pagesController.php içinde bir şey bildirmek zorundayım çünkü "Undefined variable: year" hatası aldım. P.S laravel kullanarak im 5 – Nixxx27

+0

Kodu, AppServiceProvider'ınıza açıklandığı gibi eklediyseniz, yapmanız gereken başka bir şey yoktur. Bu hatayı ne atıyor? – Tim

+0

bunu kullanıyorum ..() hakkında genel işlev { dönüş yıl; } ve hata Tanımsız değişken: yıl. Kodunu kopyalayıp yapıştırdım. – Nixxx27

4

bu deneyin:

//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

Sen olaydan önce :: Uygulamasında

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'); 
}); 
İlgili konular