通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值
Posted
技术标签:
【中文标题】通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值【英文标题】:Extract the parameter value from a slash separated url by removing extra characters in Laravel 【发布时间】:2019-09-15 21:14:08 【问题描述】:我在 laravel 框架上为我的 php 服务器创建路由。如何通过删除不必要的位从斜杠分隔的 url 中提取正确的参数值?
当url模式设置为
Route::get('user/event_id',function ($event_id)return view('rsvp',['event_id'=>$event_id]);)->where(['event_id'=>'[0-9]+']);
它完全按预期工作。但是,我想解析 'user/event-description-here5_now-<event_id>
形式的 url 并实现相同的功能。也就是说,我想在我的 php 文件中使用 event_id
并忽略 event-description-here5_now
位。我该怎么办?
【问题讨论】:
如果你可以控制路线为什么不让它 /description-here5_now/even_id 如果你没有控制权检查 php parse_str 使用 substr 你可以得到事件 id 如果它的恒定字符数 【参考方案1】:这是不可能的,因为 laravel 路由模型绑定通过通配符工作,并且在尝试从 url 段中提取数字时它不起作用。
为了让它工作,你必须自定义 laravel 路由解析逻辑: https://laravel.com/docs/5.8/routing#route-model-binding
类似的东西:
public function boot()
parent::boot();
Route::bind('eventslug', function ($value)
preg_match('/\d+/', strrev($value), $matches);
return Event::find($matches[0]) ?? abort(404);
);
或者尝试调整网址,例如:
user/event-description-here5_now/event_id
【讨论】:
以上是关于通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值的主要内容,如果未能解决你的问题,请参考以下文章
从 Laravel 中的 JSON 字符串中删除添加的反斜杠
从 JAVA 中的字符串(从 url 类型更改)中删除尾部斜杠