如何在laravel 4中使用子域?
我希望在我的L4网站中的routes.php中检测子域,并希望将该子域值存储在某个位置,以便我可以在每个控制器中访问该值 我该怎么做? 请帮助如何在laravel 4中使用子域?,laravel,laravel-4,Laravel,Laravel 4,我希望在我的L4网站中的routes.php中检测子域,并希望将该子域值存储在某个位置,以便我可以在每个控制器中访问该值 我该怎么做? 请帮助 您可以使用请求在任何地方获取域 因此,创建一个BaseController并添加一个方法以获取所有扩展控制器上的当前域: class BaseController extends Controller { public function getDomain() { return Request::getHost();
您可以使用请求在任何地方获取域 因此,创建一个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';
}
编辑:
除非你有一个很好的理由,否则你不必使用路由或在会话中存储你的子域,除非你有一个很好的理由,这是一种气味。看看Laravel的代码,它只存储了一个会话:Laravel的会话
您可以创建一个助手函数:
创建app/helpers/functions.php文件(这只是一个示例),并在其中添加此helper函数:
function getCurrentSubdomain()
{
$domain = Config::get('app.domain');
preg_match("/^(.*)(\.$domain)$/", Request::getHost(), $parts);
return $parts[1];
}
打开你的app/config/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();
}
}
您还可以为它创建一个类和一个Facade,这样您就可以从任何地方调用这个类,就像Laravel所做的那样:
Helper::getCurrentSubdomain();
或者您也可以通过创建一个类和一个静态函数(不太可测试)来实现同样的功能。您可以将这种类型的方法放入路由中。但是,我认为它更适合于“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过滤器的更多信息:
我的Laravel 4.2正在开发中 在您的路由文件中:
Route::group(['domain' => '{subdomain}.myapp.com'], function()
{
Route::get('/', function($subdomain)
{
return "Your subdomain is: ".$subdomain;
});
});
在控制器或任何位置获取子域:
$subdomain = Route::getCurrentRoute()->getParameter('subdomain');
是的,这是一种方法,您可以在任何控制器中作为参数访问子域,但我想在routes.php中检测子域,并将其存储在会话或其他机制中,以便我可以在任何地方访问它。然后在
app/start/global.php中执行此操作。这个方法对我不起作用,因为我想在routes.php中检测子域,并将其存储在会话或其他机制中,这样我就可以在任何地方访问它。
$subdomain = Route::getCurrentRoute()->getParameter('subdomain');