从 Lumen 5.2 控制器端点提供 Angular 5 SPA 时的路由问题
Posted
技术标签:
【中文标题】从 Lumen 5.2 控制器端点提供 Angular 5 SPA 时的路由问题【英文标题】:Routing issues when serving Angular 5 SPA out of a Lumen 5.2 controller endpoint 【发布时间】:2018-08-24 16:37:29 【问题描述】:我正在尝试从单个路由 Lumen 端点提供 Angular SPA。 Angular 应用程序的初始启动在直接导航到端点时有效,加载 Angular SPA 的任何子路由都不起作用
# index.twig
class CoreSpaController extends AbstractTemplateController
public function index()
return $this->renderView('@spa/index.twig');
#routes.php
$app->group([
'prefix' => 'app',
], function (Application $app)
$app->get('/', ['as' => 'app.home', 'uses' => 'Spa\\SpaController@index']);
$app->get('*', function()
return 'foo';
);
);
Lumen 应用程序通过代理通道提供服务
#nginx.conf
location ~ (/app)
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://lumenDockerRunningContainer;
/app/
加载正常
/app/foo
是一个正确路由的 Angular 子级,它会抛出一个 Lumen NotFoundHttpException
。
问题不在 Angular SPA 中,因为当它通过 index.html 提供服务时,应用程序按预期路由。
任何帮助/建议将不胜感激。
【问题讨论】:
尝试注册一个路由将所有请求传递给SpaController@index
@OluwafemiSule 这不就是$app->get('*', function() return 'hi'; );
路由会完成的事情吗?
否,当前返回“hi”。如果想法是让 SpaController@index 作为前端控制器,您需要通过它传递所有请求。
@OluwafemiSule 问题是它不返回'hi',如果返回,我会重定向到route('app.home');
【参考方案1】:
试试这个。
$app->get('/any:.*', ['as' => 'globalRoute', 'uses' => 'Spa\\SpaController@index']);
【讨论】:
以上是关于从 Lumen 5.2 控制器端点提供 Angular 5 SPA 时的路由问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥从 Lumen 5.2 中删除了 artisan serve 命令?
使用 Laravel/Lumen 5.2 和 apache 2.4