使用不同的路由和控制器来完成相同的任务但使用不同的视图非常困难。您可以采用以下方法进行改进:
- 对于
/amp/
网址,使用相同的Web控制器
- 通过修改
view()
助手,以不同的方式查看amp页面
Amp路由
为了捕获/amp/
路由,请将其添加到您的RouteServiceProvider.php
文件中。
protected function mapAmpRoutes()
{
Route::group([
'middleware' => 'web',
'namespace' => $this->namespace,
'prefix' => 'amp',
], function ($router) {
require base_path('routes/web.php');
});
}
同时修改你的map
方法:
public function map()
{
$this->mapAmpRoutes();
$this->mapWebRoutes();
$this->mapApiRoutes();
}
此时,所有类似于example.com/amp/...
的地址将指向您的web.php
路由。
Amp视图文件
现在,您应该自定义view()
帮助程序以渲染不同的amp视图。在app/Http
目录中创建一个helpers.php
文件,并添加一个视图函数:
function view($view = null, $data = [], $mergeData = [])
{
$factory = app(Illuminate\Contracts\View\Factory::class);
if (func_num_args() === 0) {
return $factory;
}
if(request()->segment(1) == 'amp'){
if(view()->exists($view . '-amp')){
$view .= '-amp';
}else{
abort(404);
}
}
return $factory->make($view, $data, $mergeData);
}
只有在将此函数添加到您的bootstrap/autoload.php
文件中后,才能加载该函数。
require __DIR__.'/../app/Http/helpers.php';
require __DIR__.'/../vendor/autoload.php';
编辑:如果你找不到 bootstrap/autoload.php
文件,请搜索 vendor/autoload.php
,因为laravel已将其移除。(感谢 MinderMondo 的评论)
现在,您可以添加任何您想要的带有“-amp”后缀的amp视图。例如,如果你拥有index.blade.php
文件,则amp视图名称应该是index-amp.blade.php
。