2017-12-09 1 views
1

저는 다양한 프로젝트에서 동일한 문제를 자주 겪고 있습니다 - database에서 일부 전역 변수를 설정하고 laravel - views, controllers, 모델. 가능한가? 아니면 가장 쉬운 방법은 무엇입니까?Laravel에서 데이터베이스의 전역 변수를 설정하는 방법 5.4

왜 내가 이것을 필요로합니까? 언어 번역. 캐시되지 않고 파일로 저장해야합니다. 앱의 어느 장소에서나 가져갈 수있는 웹 사이트 옵션. URL에/language/prefix를 만들고 싶지 않기 때문에 웹 사이트 언어를 설정할 수 있습니다.

죄송합니다.이 질문은 중복 될 수 있지만 비슷한 질문에 대한 답변은 내가 설명한대로 작동하지 않습니다.

+0

DB 모델을 올바르게 설정하면 로그인 한 사용자 세션과 관련된 모든 관련 데이터를 가져와야합니다. 모든 데이터를 세션에 저장해야한다는 의미는 아니지만 테이블 간의 관계를 올바르게 설정하면 세션'Auth :: id()'또는 세션'Auth :: user()에서 필요한 모든 종류의 데이터를 열망 할 수 있습니다. '. 내가 뭔가를 오해하지 않는다면. – Tpojka

+0

모든 뷰에 전역으로 데이터를 공유하도록 작성자를 볼 수 있으며 기본 컨트롤러의 변수를 정의하여 기본 컨트롤러를 상속하는 컨트롤러에 액세스 할 수 있습니다. 내가 도울 수 있기를 바랍니다. –

+0

@Tpojka 브라우저에서 세션을 사용할 수 없게되면이 옵션이로드에 반드시 필요하기 때문에 내 사이트가 실패합니다 ... 그래서 세션을 사용할 수 없습니다. ( – Gediminas

답변

1

모든보기에 대해 데이터를 전체적으로 공유하기 위해 view composers을 시도 할 수 있습니다.

public function compose(View $view) 
{ 
    //get value from database 
    $options = Model::where('domain_name', \Request::server("SERVER_NAME"))->get(); 
    //render to view 
    $view->with('options', $options); 
} 

$options 변수 (모델)는 모든보기에서 사용할 수 있습니다. 모든 컨트롤러와

공유하는 데이터는 당신이 기지를 만들 수 있습니다 이처럼

class LoginController extends Controller 
{ 
    public function dashboard() 
    { 
     //access here using 
     $x = $this->options; 
    } 
} 

를 사용하여 액세스 할 수 있습니다

class Controller extends BaseController 
{ 
    public $options = Model::where('domain_name', \Request::server("SERVER_NAME"))->get(); 
} 

를 기본 컨트롤러를 상속 컨트롤러에서 그들을 액세스 할 기본 컨트롤러에 변수를 정의 모델에서 데이터에 전역 적으로 액세스하려면 상속 속성을 사용하십시오.

희망은 유용 할 것입니다. options 변수에는 데이터베이스의 모든 옵션이 포함될 수 있습니다.

1> 작곡가에 줄을 추가

+0

작곡가가이 문제를 해결하는 가장 좋은 방법이라고 봅니다. 그건 그렇고 - 세션이 없어도 공개 사이트가 될 것이고 모든 페이지에 옵션을로드해야하므로 완전히 피하기를 원합니다. 다중 사이트 플랫폼이 될 것이기 때문에 어떤 도메인 웹 사이트가 제공되는지에 달려 있습니다. 감사!! 가능한 경우 누군가가 며칠 동안 더 많은 것을 제안한다면 잠시 질문을 떠날 것입니다. – Gediminas

+0

몇 가지 예를 들어 설명 할 수 있습니까? –

+0

다음과 같이 작동해야합니다. 1. 렌더링하기 전에 앱 수신 웹 사이트 도메인 2. 데이터베이스에서 ~ 20 문자열을 현재 도메인 이름으로 수신합니다. 3. 렌더링되기 전에 모든보기, 컨트롤러 및 기타에 문자열 (옵션) 공유) 감사합니다! – Gediminas

0

프로젝트의 모든 곳에서 변수에 액세스하는 가장 좋은 방법은 세션을 사용하는 것입니다. 모든 것을 세션에 저장하고 컨트롤러, 모델 및 뷰의 모든 곳에서 액세스 할 수 있습니다.

항목을 읽어 https://laravel.com/docs/5.5/session#using-the-session

당신은 응용 프로그램의 어떤 부분에서 config('config.key') 글로벌 도우미로 설정에서 데이터를 얻을 수있는 등 .env 파일

에서 데이터를 얻기 위해 전 세계적으로 사용 가능한 데이터를 저장하기위한

+0

변수가 있습니다. 사용자가 세션에 있어야하고 플러스 부츠 크롤링을 생각하고 있습니다. 세션이 작동하지 않으면 웹 사이트도 작동하지 않습니다. 일부 옵션이 중요하기 때문에 – Gediminas

0

사용 configuration files .

전역 변수를 config(['config.key' => $value])으로 동적으로 설정할 수도 있습니다.

+0

설정 파일의 데이터베이스에서 변수를 가져올 수 있습니까? – Gediminas

+0

@Gediminas 어떤 종류의 데이터를 전역 적으로 액세스 가능하게 만들고 싶습니까? –

+0

웹 사이트 도메인을 통해 어떤 사용자 컨텐트를 렌더링해야하는지 정의합니다.이 모든 경우 그의 옵션은 언어, 디자인 옵션 및 모든 다른 방문자에게 사용되는 다른 많은 것들이 있습니다. (지금 당장 필요합니다. 그러나 이것은 상황과 관련하여 처음이 아닙니다. 이) – Gediminas

1

이 작업을 수행하는 또 다른 방법은 도우미 클래스를 만드는 것입니다.JSON :

"autoload": { 
    "files": [ 
     "app/Http/helpers.php" 
    ], 

2> 파일을 만듭니다

app/Http/helpers.php 

3> 추가 코드 :

function o($code = null) { 
$option = \Option::where('code', $code)->first(); 
return $option->value; 
} 

4> 당신이 필요로하는 곳에 사용이 작동

echo o('option_code') 

을 컨트롤러 및 뷰 (호출 될 경우 렌더링하기 전에) 여기에 세션, 설정, 쿠키 등을 확인할 수 있습니다.

+0

컨트롤러와 뷰에 대해 별도의 코드를 작성할 필요가 없으므로 멋지고 효과가 좋습니다. –

+0

당신의 대답은 이것을 시도하는 영감을주었습니다 !! :) – Gediminas

관련 문제