【问题标题】:Laravel 5.6 404 eventLaravel 5.6 404 事件
【发布时间】: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


【解决方案1】:

// other routes redirected to login Route::get('/{any}', function () { return redirect('/login'); })->where('any', '.*s');

试试这条路

【讨论】:

  • 这和我的代码一样——它不起作用——它会覆盖任何其他定义的路由
猜你喜欢
  • 2019-03-31
  • 2018-09-26
  • 2019-01-25
  • 2018-12-19
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多