当前位置: 首页 > 知识库问答 >
问题:

带数据的Laravel路由重定向

黄弘盛
2023-03-14

我有一条基本路线,如下所示:

Route::prefix('/group')->group(function () {
    // Some routes here
    Route::prefix('/{uuid}')->group(function () {
        // Some routes here
        Route::get('/user/{id}', 'Controller@preview')->name('view-user')->where('id', '[0-9]+');
    }
}

逻辑是我希望id仅为数值。我现在要做的是,如果值是非数字的,则声明对此的重定向。假设id的输入是fs。在这种情况下,我希望它重定向到值为1id

我尝试使用路由:重定向,但无法正常工作。它看起来像这样:

Route::redirect('/group/{uuid}/user/{id}', '/group/{uuid}/user/1')->where('id', '[^0-9]+');

我更愿意将重定向放在组内,但如果这是唯一的方法,它可以放在组外。任何帮助都将不胜感激。

发生的情况是,如果我声明了路由重定向,就会出现404错误。

编辑:我想在routes/web中进行编辑。php文件。我知道如何在控制器中执行此操作,但在当前情况下,这不是我需要的。闭包也不是一个选项,因为这会阻止路由缓存。

共有3个答案

慕容博涛
2023-03-14

我认为你可以在路由器的控制器内完成,逻辑如下:

class Controller {
    // previous code ..

    public function preview($uuid, $id) {
        if(! is_numeric($id))
            return redirect("/my-url/1");

        // run the code below if $id is a numeric value..
        // if not, return to some url with the id = 1
    }
}

我认为没有办法覆盖laravel的“where”函数,但我猜在路由绑定中有类似的功能:

或者,您可以在Eloquent模型上重写解析路由绑定方法。此方法将接收URI段的值,并应返回应注入路由的类的实例:

/**
 * Retrieve the model for a bound value.
 *
 * @param  mixed  $value
 * @return \Illuminate\Database\Eloquent\Model|null
 */
public function resolveRouteBinding($value)
{
    return $this->where('name', $value)->first() ?? abort(404);
}

但是它要求你管理考虑模型的值,而不是你想要的任何标识。

万明辉
2023-03-14

你宣布它颠倒了。

在Laravel中,可以通过以下方式重定向传递的参数:

您可以传递名称而不是url,只需传递变量。

Redirect::route('view-user',[$uuid,$id])

楚博雅
2023-03-14

对评论采取后续行动

您可以在路由/web.php文件中创建一个路由,捕获非数字标识,并将其重定向到id=1的“视图用户

看起来会像这样

Route::get('/group/{uuid}/user/{id}', function ($uuid, $id) {
  return redirect('view-user', ['uuid' => $uuid, 'id' => 1]);
})->where('id', '[^0-9]+');

// and then below have your normal route

Route::get('/group/{uuid}/user/{id}', 'Controller@preview')->name('view-user')->where('id', '[0-9]+');

下面是您不想使用闭包的注释。

将“错误输入路径”更改为

Route::get('/group/{uuid}/user/{id}', 'Controller@redirectBadInput')->where('id', '[^0-9]+');

然后在类Controller中添加方法:

public function redirectBadInput ($uuid, $id) {
  return redirect('view-user', ['uuid' => $uuid, 'id' => 1]);
}

您可以在这个SO线程中看到更多关于重定向和缓存的内容。

 类似资料:
  • 我试图重定向路由从控制器函数后,在Laravel 5.4表单提交过程中,如下面的链接所说 https://laravel.com/docs/5.4/redirects#redirecting-命名路线 路线; 控制器; 当我试图重定向我得到这个错误。 InvalidArgumentExcema在UrlGenerator.php304行:路由[配置文件]未定义。 关于重定向,我已经搜索了好几次,但都

  • 我有一个索引页面,其中列出了我所有的数据,还有一个简单的过滤表单,它向给定的路径发出请求 在控制器中,我的索引方法如下 还有我的过滤方法,它执行请求,并将过滤后的数据传递到索引使用的相同视图。 我想学习的是,实施这样一个案例的最佳方式是什么?是否有可能在执行过滤请求后重定向回相同的索引路由?并且方法在刀片模板中不起作用,因此我不能在请求后显示旧表单数据。它有什么问题?最后,我如何删除索引和筛选方法

  • 当我在web.php中定义了路由时,我在使用Laravel时遇到了一个路由未定义的错误,如下所示: 我正在从下面的代码重定向到路由 auth()代码可以工作,但当调用重定向时,我得到错误'route[home]not defined'。有没有人知道我怎么解决这个错误。任何帮助都会很好

  • 上一篇文章我们说到路由的正则编译,正则编译的目的就是和请求的 url 来匹配,只有匹配上的路由才是我们真正想要的,此外也会通过正则匹配来获取路由的参数。 路由的匹配 路由进行正则编译后,就要与请求 request 来进行正则匹配,并且进行一些验证,例如 UriValidator、MethodValidator、SchemeValidator、HostValidator。 class RouteCo

  • 作为一个 web 后台框架,路由无疑是极其重要的一部分。本博客接下来几篇文章都将会围绕路由这一主题来展开讨论,分别讲述: 路由的使用 路由属性注册 路由的正则编译与匹配 路由的中间件 路由的控制器与参数绑定 RESTful 路由 和之前一样,第一篇将会利用单元测试样例说明我们在平时可能用到的 route 的 api 函数用法,后面几篇文章将会剖析 laravel 的 route 源码。下面开始介绍

  • 英文原文:http://emberjs.com/guides/routing/redirection/ 过渡与重定向 在路由中调用transitionTo或者在控制器中调用transitionToRoute,将停止当前正在进行的过渡,并开启一个新的,这也用作重定向。transitionTo具有参数,其行为与link-to助手相同。 如果过渡到一个没有动态段的路由,路由的model钩子始终都会运行。