【问题标题】:Laravel displays redirecting to urlLaravel 显示重定向到 url
【发布时间】:2015-10-16 19:45:26
【问题描述】:

大家好,我正在尝试验证我的输入,但是当验证失败时重定向出现奇怪的问题 laravel 在页面加载之前显示“重定向到http://localhost:8888/public/admin/categories/create”。 这是我在控制器中的验证:

$rules = [
            'name' => 'required | unique:categories'
        ];
        $input = Input::all();
        $validator = Validator::make($input, $rules);
        if($validator->fails()){
            return Redirect::route('admin.categories.create')->withErrors($validator)->withInput();
        }

我怎样才能删除这条消息,只显示有错误的页面?

【问题讨论】:

    标签: php validation laravel-4 laravel-validation


    【解决方案1】:

    当你要求 Laravel 重定向时,它会做两件事:

    • 发送带有目标 URL 的 Location 标头 - 这是默认的重定向方法
    • 输出 HTML 并使用 Javascript 完成重定向 - 这是一种备用机制,以防无法发送标头

    如果您看到回退机制,则表示发送标头时出现问题。最常见的原因是您的代码在发送重定向标头之前确实输出了一些内容。启用错误报告 (error_reporting(E_ALL)),您可能会收到“标头已发送”的警告。

    【讨论】:

    • 我添加了error_reporting(E_ALL);到 app/start/global.php 但我没有任何错误消息我的 laravel.log 文件也是空的。我怎样才能找到这个错误?
    • 在 global.php 的开头添加 ob_start() 然后 dd(strlen(ob_get_contents()));就在您的“返回重定向”之前。它应该输出已经回显的数据量
    • 我只有在提交表单后才得到int 4。奇怪..有什么想法吗?
    • 做 dd(ob_get_contents());看看什么是回声 - 也许这会帮助你找到回声的地方。确保在重定向之前不输出任何内容,并且在重定向时不会看到 HTML
    • 不,这意味着您正在输出 4 个白色字符,例如空格。原因可能是关闭 ?> 标签后的空行。