我有一条基本路线,如下所示:
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
。在这种情况下,我希望它重定向到值为1
的id
。
我尝试使用路由:重定向
,但无法正常工作。它看起来像这样:
Route::redirect('/group/{uuid}/user/{id}', '/group/{uuid}/user/1')->where('id', '[^0-9]+');
我更愿意将重定向放在组内,但如果这是唯一的方法,它可以放在组外。任何帮助都将不胜感激。
发生的情况是,如果我声明了路由重定向,就会出现404错误。
编辑:我想在routes/web中进行编辑。php
文件。我知道如何在控制器中执行此操作,但在当前情况下,这不是我需要的。闭包也不是一个选项,因为这会阻止路由缓存。
我认为你可以在路由器的控制器内完成,逻辑如下:
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);
}
但是它要求你管理考虑模型的值,而不是你想要的任何标识。
对评论采取后续行动
您可以在路由/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钩子始终都会运行。