2019-02-20
app\Providers\AppServiceProvider.php 파일의 AppServiceProvider클래스에서 boot()함수 View::share()를 통해서 blade템플릿에서 전역으로 사용 가능한 값들을 등록 가능하다.

그래서 아래처럼 boot()함수에 Auth::user()를 등록해놓고 user관련 값을 전역으로 쓰려고 했더니.. 안된다..
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Auth;

class AppServiceProvider extends ServiceProvider
{
	public function register()
	{
	}

	public function boot()
	{
		View::share('user', Auth::user()->toArray());
		View::share('login_chk', Auth::check());
	}
}
해당 오브젝트가 없다는 에러가 뜰 뿐이다.

찾아보니, laravel에서 세션 요청은 미들웨어보다 먼저 실행되기 때문에, 아래처럼 콜백을 사용한뒤 쓰면 제대로 값을 가져 올 수 있다고 한다.
참고 링크 https://stackoverflow.com/questions/37372357/laravel-how-to-get-current-user-in-appserviceprovider
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Auth;

class AppServiceProvider extends ServiceProvider
{
	public function register()
	{
	}

	public function boot()
	{
		view()->composer('*', function ($view){
			// 세션이 만료 됐을 경우 Auth::user()가 없기때문에 toArray()를 쓸때 오류가 생긴다
	 		if( Auth::user() ){
				View::share('user', Auth::user()->toArray());
				View::share('login_chk', Auth::check());
			}
		});
	}
}
위처럼 작성후에는 어떤 blade파일에서든 {{ $user['id'] }} 방식으로 사용이 가능하다.


//----------- 추가 2019.03.15

어디서든 사용할 config를 만들고 싶을때는, 위의 boot()함수에 아래와 같이 설정하면 된다.
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;

class AppServiceProvider extends ServiceProvider
{
	public function boot()
	{
		if( Schema::hasTable('settings_table') ){
			$rlt = DB::table('settings_table')->get()->toArray();
			$settings = array();
			foreach( $rlt as $tv ){
				$settings[$tv->type][$tv->option] = $tv->explain;
			}
			config(['settings' => $settings]);
		}
	}
}
boot()함수에서 settings_table에 있는 setting내용들을 config에 등록해놓으면, model이나 controller에서
$settings = config("settings");
위와 같은 방식으로 바로 사용 가능하다.

Schema파사드(facade)로 해당 테이블이 존재하는지 체크해주지 않으면, 마이그레이션을 할때 오류가 뜨니 알아두기 바란다.