global variable for all controller and views

后端 未结 16 2109
Happy的楠姐
Happy的楠姐 2020-11-27 15:54

In Laravel I have a table settings and i have fetched complete data from the table in the BaseController, as following

public function __construct() 
{
             


        
相关标签:
16条回答
  • 2020-11-27 16:19

    At first, a config file is appropriate for this kind of things but you may also use another approach, which is as given below (Laravel - 4):

    // You can keep this in your filters.php file
    App::before(function($request) {
        App::singleton('site_settings', function(){
            return Setting::all();
        });
    
        // If you use this line of code then it'll be available in any view
        // as $site_settings but you may also use app('site_settings') as well
        View::share('site_settings', app('site_settings'));
    });
    

    To get the same data in any controller you may use:

    $site_settings = app('site_settings');
    

    There are many ways, just use one or another, which one you prefer but I'm using the Container.

    0 讨论(0)
  • 2020-11-27 16:22

    In Laravel 5.1 I needed a global variable populated with model data accessible in all views.

    I followed a similar approach to ollieread's answer and was able to use my variable ($notifications) in any view.

    My controller location: /app/Http/Controllers/Controller.php

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Foundation\Bus\DispatchesJobs;
    use Illuminate\Routing\Controller as BaseController;
    use Illuminate\Foundation\Validation\ValidatesRequests;
    use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
    
    use App\Models\Main as MainModel;
    use View;
    
    abstract class Controller extends BaseController
    {
        use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    
        public function __construct() {
            $oMainM = new MainModel;
            $notifications = $oMainM->get_notifications();
            View::share('notifications', $notifications);
        }
    }
    

    My model location: /app/Models/Main.php

    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use DB;
    
    class Main extends Model
    {
        public function get_notifications() {...
    
    0 讨论(0)
  • 2020-11-27 16:23

    A global variable for using in controllers; you can set in AppServiceProvider like this :

    public function boot()
    {
        $company=DB::table('company')->where('id',1)->first();
        config(['yourconfig.company' => $company]);
    }
    

    usage

    config('yourconfig.company');
    
    0 讨论(0)
  • 2020-11-27 16:24

    There are two options:

    1. Create a php class file inside app/libraries/YourClassFile.php

      a. Any function you create in it would be easily accessible in all the views and controllers.

      b. If it is a static function you can easily access it by the class name.

      c. Make sure you inclued "app/libraries" in autoload classmap in composer file.

    2. In app/config/app.php create a variable and you can reference the same using

      Config::get('variable_name');

    Hope this helps.

    Edit 1:

    Example for my 1st point:

    // app/libraries/DefaultFunctions.php
    
    class DefaultFunctions{
    
        public static function getSomeValue(){
         // Fetch the Site Settings object
         $site_settings = Setting::all();
         return $site_settings; 
        }
    }
    
    //composer.json
    
    "autoload": {
            "classmap": [
    ..
    ..
    ..  
            "app/libraries" // add the libraries to access globaly.
            ]
        }
    
     //YourController.php
    
       $default_functions  = new DefaultFunctions();
        $default_functions->getSomeValue();
    
    0 讨论(0)
提交回复
热议问题