Laravel重定向并停止应用程序

时间:2014-12-17 14:21:27

标签: php redirect laravel laravel-4 response

我正在尝试从我的服务类重定向。我不想将url返回给调用者,因为它不是直接从控制器访问的,并且在某些情况下它应该返回其他数据。 但是我发现我可以这样重定向:

Redirect::away('http://someexternalurl.com')->send();

这似乎工作正常 - 用户被重定向到我输入的网址。问题是,在这种情况下,应用程序“依赖”,以便执行以下命令。那不是我需要的。

如果我die();之后我的会话更改似乎没有被“保存”。

有没有办法进行重定向并在此之后立即停止应用而不是简单地“杀死”它?

基本上有一种方法可以重写这段代码

Session::forget('myval');
Redirect::away('http://someexternalurl.com')->send();
mail('my@mail.com', 'Test', 'Still running');

因此myval将从会话中消失,用户将被重定向到url并且不会发送邮件(实际上任何重定向都不应该被执行)?

谢谢

3 个答案:

答案 0 :(得分:2)

这是Laravel 5.2的解决方案。我估计它将全部工作。*

abort(301, '', ['Location' => 'http://antondukhanin.ru']);
methodThatWouldntBeExecuted();

该函数抛出HttpException,因此将中断任何下一个命令的执行

答案 1 :(得分:1)

看起来你只需要重新定位Redirect?

return Redirect::away('http://someexternalurl.com')->send();

答案 2 :(得分:1)

解决方案是抛出异常并改写异常处理程序的render方法。

在您的控制器中:

// app/Controllers/DashboardController.php

public function index()
{
    \App\Services\Test::test();

    return view('dashboard');
}

我的示例服务:

// app/Services/Test.php
<?php

namespace App\Services;

class Test {
    public static function test() {
        throw new \App\Exceptions\TestException('test');
    }
}

在您的异常处理程序中:

// app/Exceptions/Handler.php
public function render($request, Exception $exception)
{
    if ($exception instanceof TestException) {
        return redirect(url('/?error=' . $exception->getMessage()));
    }

    return parent::render($request, $exception);
}

我的示例Exception(可以随意命名),只需要扩展默认的Exception。

<?php

namespace App\Exceptions;

class TestException extends \Exception {

}