从 url 中获取两个字段并将它们转换为变量以查询搜索

Get both fields from url and convert them to variables to query a search

我正在尝试获取 api enpoint 中的两个字段,以便它基于此进行查询。例如。

api/evenSession/123123123/eventSession?token=1234656&filter= chris moreno

我的控制器按名字或姓氏搜索。但是我想创建一个端点,如果它传入 "chris moreno"

,它会查询数据库

这是我的 $filter 代码

if(preg_match_all('/^[A-Z]*[a-z]*(-|\s)[A-Z]*[a-z]*$/', $filter)){
       $searchFields = [
           'a.lastName',
           'a.firstName'
       ];

我希望能够在我的过滤器中捕获这两个字段(chris 和 moreno),以便我可以将其传递给我的查询,以便它可以检查使用名字和姓氏签到的人(窄搜索)

在这里,如果我们的输入如所列,我们将有三个捕获组,例如,我们将以以下表达式开头:

token=(.*?)&filter=\s*([\w]+)\s+([\w]+)

Demo 1

在这里,我们在这个捕获组中的令牌值:

(.*?)

以及我们在这两个独立捕获组中的名字:

([\w]+)

其中最后两组可以修改,如果我们有像奥尼尔这样的名字,那可能不会落入[A-Za-z] char class。例如,我们可以允许任何字符:

token=(.*?)&filter=\s*(.+?)\s+(.+) 

Demo 2

测试

$re = '/token=(.*?)&filter=\s*([\w]+)\s+([\w]+)/m';
$str = 'api/evenSession/123123123/eventSession?token=1234656&filter= chris moreno
api/evenSession/123123123/eventSession?token=1234656&filter= alice bob
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

$searchFields = [];
foreach ($matches as $key => $value) {
    $searchFields[$key] = [$value[2], $value[3]];
}

var_dump($searchFields);

Demo 3