L4 웹 사이트에서 routes.php의 하위 도메인을 감지하고 해당 하위 도메인 값을 어딘가에 저장하여 각 컨트롤러에서 해당 값에 액세스 할 수있게하려고합니다.laravel 4에서 하위 도메인을 사용하는 방법?
어떻게하면됩니까? 당신은 어디서든 도메인을 얻기 위해 요청을 사용할 수 있습니다
L4 웹 사이트에서 routes.php의 하위 도메인을 감지하고 해당 하위 도메인 값을 어딘가에 저장하여 각 컨트롤러에서 해당 값에 액세스 할 수있게하려고합니다.laravel 4에서 하위 도메인을 사용하는 방법?
어떻게하면됩니까? 당신은 어디서든 도메인을 얻기 위해 요청을 사용할 수 있습니다
경로에이 유형의 메소드를 넣을 수 있습니다. 그러나 '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#sub-domain-routing
Route::group(array('domain' => '{account}.myapp.com'), function() {
Route::get('user/{id}', function($account, $id) {
//
});
});
도와주세요.
그래서하는 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이하는 것처럼 당신은 어디에서이 클래스를 호출 할 수 있습니다.
routes.php에서 하위 도메인을 감지하고 세션이나 다른 메커니즘에 저장하려고하므로이 방법을 사용할 수 없으므로 어디에서나 액세스 할 수 있습니다. –
당신이 여기서 말한 것에 대답하기 위해 편집했습니다. –
지금 내 Laravel 4.2에서 작동하고 있습니다. 당신의 경로에
파일 : 어디Route::group(['domain' => '{subdomain}.myapp.com'], function()
{
Route::get('/', function($subdomain)
{
return "Your subdomain is: ".$subdomain;
});
});
가져 오기 당신의 컨트롤러에 하위 도메인이나 : 예
$subdomain = Route::getCurrentRoute()->getParameter('subdomain');
당신이 어떤 컨트롤러에 perameter으로 하위 도메인에 액세스 할 수 있도록하는 방법이 있지만 내가 원하는을 routes.php의 하위 도메인을 감지하고 세션이나 다른 메커니즘에 저장하여 어디서나 액세스 할 수 있도록합니다. –
그런 다음'app/start/global.php'에서 실행하십시오. 좋아하는대로 보관하십시오. – ceejayoz