2013-10-23 2 views
2

L4 웹 사이트에서 routes.php의 하위 도메인을 감지하고 해당 하위 도메인 값을 어딘가에 저장하여 각 컨트롤러에서 해당 값에 액세스 할 수있게하려고합니다.laravel 4에서 하위 도메인을 사용하는 방법?

어떻게하면됩니까? 당신은 어디서든 도메인을 얻기 위해 요청을 사용할 수 있습니다

답변

8

경로에이 유형의 메소드를 넣을 수 있습니다. 그러나 'app/filters.php'파일의 필터에 더 적합하다고 생각합니다.이 시도 :

Route::filter('getSubdomain', function($route, $request) 
{ 
    $host = $request->getHost(); 
    $parts = explode('.', $host); 
    $subdomain = $parts[0]; 

    // Store subdomain in session 
    Session::put('subdomain', $subdomain); 

}); 

그런 다음 다음과 같이 경로 (아마 그룹 경로)에 필터를 추가

Route::group(array('before' => 'getSubdomain'), function() 
{ 
... add route stuff here .. 
}); 

당신은 Laravel을 사용하는 방법에 대한 자세한 내용을보실 수 있습니다 여기에 필터 :

http://laravel.com/docs/routing#route-filters

10

http://laravel.com/docs/routing#sub-domain-routing

Route::group(array('domain' => '{account}.myapp.com'), function() { 
    Route::get('user/{id}', function($account, $id) { 
     // 
    }); 
}); 
+0

당신이 어떤 컨트롤러에 perameter으로 하위 도메인에 액세스 할 수 있도록하는 방법이 있지만 내가 원하는을 routes.php의 하위 도메인을 감지하고 세션이나 다른 메커니즘에 저장하여 어디서나 액세스 할 수 있도록합니다. –

+0

그런 다음'app/start/global.php'에서 실행하십시오. 좋아하는대로 보관하십시오. – ceejayoz

4

도와주세요.

그래서하는 BaseController를 작성하고 모든 확장 된 컨트롤러의 현재 도메인 얻을 수있는 방법을 추가

class BaseController extends Controller { 

    public function getDomain() 
    { 
     return Request::getHost(); 
    } 

} 

을 그리고 그것을 사용 : 물론

class PostsController extends BaseController { 

    public function store() 
    { 
     $post = new Post; 

     $post->domain_id = Domain::where('name', $this->getDomain())->first()->id; 

     $post->save(); 
    } 

} 

을,이 컨트롤러의 예는 것을 예로 도메인 모델을 보유하고 있습니다.

class Domain extends Eloquent { 

    private $table = 'domains'; 

} 

EDIT :

당신이 그것을위한 아주 좋은 이유가 없다면, 당신이 경로를 사용하거나 이것에 대한 정말 좋은 이유가 없다면, 세션에 하위 도메인을 저장하지 않아도, 그것은 냄새입니다. Laravel의 코드를 살펴보면 Laravel의 세션 인 세션이 하나만 저장됩니다.

당신은 도우미 함수 만들 수 있습니다

이 응용 프로그램/도우미/functions.php 파일을 생성 (이 그냥 예입니다) 그곳이 도우미 기능 추가 : 당신의 앱을 엽니 다

function getCurrentSubdomain() 
{ 
    $domain = Config::get('app.domain'); 

    preg_match("/^(.*)(\.$domain)$/", Request::getHost(), $parts); 

    return $parts[1]; 
} 

를/설정/app.php과에 도메인 구성을 추가 :

:

return array(

    'domain' => 'myapp.com', 

     ... 
); 

이 composer.json의 자동로드 섹션에 파일을 추가합니다

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

}, 

그럼 당신은 어디에서나 사용할 수 있습니다 : 등 컨트롤러, 클래스, 라우터, 여기에 같은 예는 사용하여 이전의 :

class PostsController extends BaseController { 

    public function store() 
    { 
     $post = new Post; 

     $post->domain_id = Domain::where('name', getCurrentSubdomain())->first()->id; 

     $post->save(); 
    } 

} 

또한 클래스와 그것의 외관을 만들 수 있으므로

Helper::getCurrentSubdomain(); 

을 또는 당신은 단지 클래스를 생성하여 동일한 작업을 수행하고 정적 기능 (이하 검증)을 만들 수 있습니다 Laravel이하는 것처럼 당신은 어디에서이 클래스를 호출 할 수 있습니다.

+0

routes.php에서 하위 도메인을 감지하고 세션이나 다른 메커니즘에 저장하려고하므로이 방법을 사용할 수 없으므로 어디에서나 액세스 할 수 있습니다. –

+0

당신이 여기서 말한 것에 대답하기 위해 편집했습니다. –

0

지금 내 Laravel 4.2에서 작동하고 있습니다. 당신의 경로에

파일 : 어디

Route::group(['domain' => '{subdomain}.myapp.com'], function() 
{ 
    Route::get('/', function($subdomain) 
    { 
     return "Your subdomain is: ".$subdomain; 
    }); 
}); 

가져 오기 당신의 컨트롤러에 하위 도메인이나 : 예

$subdomain = Route::getCurrentRoute()->getParameter('subdomain'); 
관련 문제