【发布时间】:2018-03-02 17:45:34
【问题描述】:
我一直在兜圈子。
我们使用捆绑包在 Laravel 3 中编写了一个 CMS 系统。 是时候使用最新的 Lavarel 5.6 开发一个新的了。
我们希望能够在 web.php 中定义我们自己的路由,但所有未定义的内容都会被 CMS 包路由文件拾取,因此它可以检查 CMS 中是否定义了页面并返回正确的视图.
在 L3 中我们这样做了:
Event::override('404', function() {
...magic
在 laravel 5.6 中你不能这样做,所以我尝试了各种方法:
Route::any('/{any}', function ($url = false) {
})->where('any', '.*');
但问题是 Laravel 会在内存中加载 所有 路由文件,并且 /{any} 路由会覆盖 web.php 中定义的任何路由,而不管服务提供者的加载顺序和我们希望允许定义路由,但要清除尚未定义的任何内容。
在 L4 中,您似乎曾经能够做到这一点:
App::missing(function($e) {
但这在 L5 中是不可能的
我可以通过异常处理程序运行它,但我希望它可以在包中工作,以便它易于安装,但我也无法使其工作!
任何帮助将不胜感激。
【问题讨论】:
-
如果你最后定义这条路线,它应该可以工作。
-
不,实际上最后加载它并没有覆盖所有其他路由。这是因为 laravel 将所有路由一起加载到内存中。
标签: php laravel content-management-system http-status-code-404