如何在 Laravel 中呈现 Web 和移动视图
How to render web and mobile views in Laravel
每条路线我有两个 blade 文件,一个用于网络,一个用于移动设备。我不知道处理请求的正确方法。
这是正确的方法吗:
在每个控制器功能结束时(对于每个请求)
If it is mobile (via Jenssegers)
View::make(file_mobile.blade.php)
else
View::make(file_web.blade.php)
你有什么建议?
一种选择是使用像 Laravel Agent 这样的库。
https://github.com/jenssegers/Laravel-Agent
if ( Agent::isMobile() ) {
View::make("file_mobile.blade.php");
} else {
View::make("file_web.blade.php");
}
与其在每个控制器方法中重复这一点,不如将其抽象出来。 response macro 似乎是个不错的选择,可能类似于:
Response::macro('ress', function($viewname)
{
if ( Agent::isMobile() ) {
return View::make($viewname . "_mobile.blade.php");
} else {
return View::make($viewname . "_web.blade.php");
}
});
以便您可以在控制器中调用它:
return Response::ress('file');
这些都是未经测试的代码,只是为您指出一种可能的解决方案。
jszobody 的答案可能是最好的,因为您已经制作了每个版本的视图,但将来,我会考虑控制器布局。
基本上您要做的是构建两种布局,一种用于移动设备,一种用于非移动设备,然后在 BaseController
的构造函数中进行设置。这些布局将包含所有必要的样式、导航栏或所有视图应该共有的任何其他内容。
public function __construct()
{
$this->layout = Agent::isMobile() ? 'layouts.mobile' : 'layouts.nonMobile';
}
两种布局都会有一个 @yields('content')
来为其提供内容部分,您的所有视图都应该只关心布局中显示的内容。
那么您只需在布局中设置内容部分,而不是在控制器中返回视图。
$this->layout->content = View::make('user.content');`
这是我在个人项目中所做的,通常效果很好。如果您想尝试新的网站布局或需要添加移动布局甚至管理布局,只需创建布局,修改 BaseController::__constructor()
以在需要时进行设置,即可完成。
每条路线我有两个 blade 文件,一个用于网络,一个用于移动设备。我不知道处理请求的正确方法。 这是正确的方法吗:
在每个控制器功能结束时(对于每个请求)
If it is mobile (via Jenssegers)
View::make(file_mobile.blade.php)
else
View::make(file_web.blade.php)
你有什么建议?
一种选择是使用像 Laravel Agent 这样的库。
https://github.com/jenssegers/Laravel-Agent
if ( Agent::isMobile() ) {
View::make("file_mobile.blade.php");
} else {
View::make("file_web.blade.php");
}
与其在每个控制器方法中重复这一点,不如将其抽象出来。 response macro 似乎是个不错的选择,可能类似于:
Response::macro('ress', function($viewname)
{
if ( Agent::isMobile() ) {
return View::make($viewname . "_mobile.blade.php");
} else {
return View::make($viewname . "_web.blade.php");
}
});
以便您可以在控制器中调用它:
return Response::ress('file');
这些都是未经测试的代码,只是为您指出一种可能的解决方案。
jszobody 的答案可能是最好的,因为您已经制作了每个版本的视图,但将来,我会考虑控制器布局。
基本上您要做的是构建两种布局,一种用于移动设备,一种用于非移动设备,然后在 BaseController
的构造函数中进行设置。这些布局将包含所有必要的样式、导航栏或所有视图应该共有的任何其他内容。
public function __construct()
{
$this->layout = Agent::isMobile() ? 'layouts.mobile' : 'layouts.nonMobile';
}
两种布局都会有一个 @yields('content')
来为其提供内容部分,您的所有视图都应该只关心布局中显示的内容。
那么您只需在布局中设置内容部分,而不是在控制器中返回视图。
$this->layout->content = View::make('user.content');`
这是我在个人项目中所做的,通常效果很好。如果您想尝试新的网站布局或需要添加移动布局甚至管理布局,只需创建布局,修改 BaseController::__constructor()
以在需要时进行设置,即可完成。