通过删除 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 字符串中删除添加的反斜杠

如何从 Python 中的数据中删除多余的逗号

python如何去掉字符串中的斜杠

从 JAVA 中的字符串(从 url 类型更改)中删除尾部斜杠

从 MoreNavigationController 中删除 tableView 中的多余行

从查询字符串 Apache 中删除尾部斜杠