1

有没有办法在 Laravel 4 中的 Input::only 中使用通配符?

例如:

$actInputs = Input::only('act*');

只给我以 string 开头的输入act

4

2 回答 2

1

这有效:

$actInputs = array();
foreach (Input::all() as $id => $value) {
   if (preg_match('/^act(\w+)/i', $id))
      $actInputs[$id] = $value;
}
于 2013-11-02T12:49:51.673 回答
0

我想到了另一种方法

(inputStartsWith、inputEndsWith 和 InputMatching)

// inputStartsWith a string
function inputStartsWith($pattern = null)
{
    $input = Input::all(); $result = array();
    array_walk($input, function ($v, $k) use ($pattern, &$result) {
        if(starts_with($k, $pattern)) {
            $result[$k] = $v;
        }
    });
    return $result;
}

像这样使用它:

$inputs = inputStartsWith('act');

更新:(inputEndsWith

// inputEndsWith a string
function inputEndsWith($pattern = null)
{
    $input = Input::all(); $result = array();
    array_walk($input, function ($v, $k) use ($pattern, &$result) {
        if(ends_with($k, $pattern)) {
            $result[$k] = $v;
        }
    });
    return $result;
}

像这样使用它:

$inputs = inputEndsWith('_name');

可以将这些用作函数helper或类并添加这些函数。extendcore

更新:(模式匹配)

function InputMatching($pattern) {
    $input = Input::all();
    return array_intersect_key(
        $input,
        array_flip(preg_grep($pattern, array_keys($input), 0))
    );
}

像这样使用它:

// will match 'first_name1' and 'first_name2' (ends with digit)
$inputs = InputMatching("/^.*\d$/");

这可能会有所帮助。

于 2013-11-02T14:08:17.820 回答