【问题标题】:How do you check if a path is valid in Laravel 5?你如何检查 Laravel 5 中的路径是否有效?
【发布时间】:2017-03-04 21:08:47
【问题描述】:

我正在构建一个简单的功能,您可以将destination 查询参数传递给/login 页面,这会导致您被重定向到该页面,而不是我设置的默认行为。

目标存储在会话中,然后用于在我的 LoginController 内部重定向。

这是我的sn-p:

if ($destination = session('login_redirect')) { . 
    $route = app('router')->getRoutes()->match(app('request')->create($destination));
    $destination_route = route($route->getName(), $route->parameters());
}

如果路径有效,我只需要重定向,并且我想在决定重定向之前检查它。有效,我的意思是 Laravel 将返回 200 的 URL。现在,当路径有效时,当我调用app('request')->create() 将路径转换为路线时,我(逻辑上)得到NotFoundHttpException

是在app\Exceptions\Handler.phprender() 函数中做一些恶作剧的唯一方法吗?如果是这样,我不清楚如何区分有效的 404(用户页面请求)和我通过以编程方式创建请求而得到的异常。

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    如何检查 $destination 变量是否已设置且不为空,如果是,则直接重定向到给定的目的地。

    否则,($destination 已在会话中设置,但与您的应用程序中存在的任何路由都不匹配)抛出一个新异常并将其命名为您想要的任何名称,然后最终在 app/Exceptions/handler.php 中捕获该异常,或者您可以简单地重定向到此 else 语句中的默认路径。代码如下所示:

    $destination = session('login_redirect')
    if ($destination && $destination != "" )) {
        try {
            $route = app('router')->getRoutes()->match(app('request')->create($destination));
            $destination_route = route($route->getName(), $route->parameters());
        }
        catch(Exception $e) {
            return $e
            // OR
            throw new Myexception;
        }
    }
    else {
        return redirect("foobar");
        // OR
        throw new MyException;
    }
    

    【讨论】:

    • 这行不通,因为 try/catch 没有捕捉到 NotFoundHttpException 异常。
    • 那么我想你最好的选择可能是像这样在你的 handler.php 中捕获该异常。 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; if ($e instanceof NotFoundHttpException) { // Your stuff here }
    猜你喜欢
    • 2011-09-06
    • 2011-05-05
    • 2013-04-06
    • 2014-05-05
    • 2014-02-20
    • 1970-01-01
    • 2022-12-15
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多