laravel post - >调节器

时间:2018-04-11 23:21:09

标签: php laravel

我无法理解为什么以下代码无效:

public function subscribe(Request $request){

    $errorsss = [];

    foreach ($request->input() as $key => $input){

        if ($key === 'name') {
            if (empty($request[$key]))
                $errorsss['name'] = 'Msg 1';

        }elseif($key === 'address'){

            if (empty($request[$key]))
                $errorsss['address'] = 'Msg 2';

        }elseif($key === 'email'){

            if (!filter_var($request[$key], FILTER_VALIDATE_EMAIL))
                $errorsss['email'] = 'Msg 3';

        }

        if ($errorsss == null)
            $errorsss = 'none';

    }

    return view('welcome', ['errorsss' => $errorsss, 'request' => $request->input()]);

这只是简单的表单提交,检查POST输入。

我得到:"非法字符串偏移'电子邮件'"

其中涉及$ errorsss [' email'] =' Msg 3&#39 ;;线。

你可以帮我解决一下吗?

2 个答案:

答案 0 :(得分:0)

基本上你不能将对象类型$request用作数组,如$request[$key]

您只需使用$input代替

public function subscribe(Request $request){

    $errorsss = [];

    foreach ($request->input() as $key => $input){

        if ($key === 'name') {
            if (empty($input))
                $errorsss['name'] = 'Msg 1';

        }elseif($key === 'address'){

            if (empty($input))
                $errorsss['address'] = 'Msg 2';

        }elseif($key === 'email'){

            if (!filter_var($input, FILTER_VALIDATE_EMAIL))
                $errorsss['email'] = 'Msg 3';

        }

        if ($errorsss == null)
            $errorsss = 'none';

    }

    return view('welcome', ['errorsss' => $errorsss, 'request' => $request->input()]);

答案 1 :(得分:0)

你的问题在

if ($errorsss == null)
    $errorsss = 'none';
如果$errorsss == null是一个空数组,

$errorsss将返回true。

所以会发生的是,在foreach循环的一次迭代中,它会到达此行并用字符串替换$errorsss。因此,下次迭代时,您尝试为$errorsss['email']分配一些值。但是$erorrsss此时是一个字符串(不再是您期望的数组),因此您会收到此错误。

快速浏览一下,最简单的解决方案就是删除该行。

或者将其移到foreach语句之外,如下所示:

public function subscribe(Request $request) {
    $errorsss = [];

    foreach ($request->input() as $key => $input){
        if ($key === 'name') {
            if (empty($input))
                $errorsss['name'] = 'Msg 1';
        } elseif($key === 'address') {
            if (empty($input))
                $errorsss['address'] = 'Msg 2';
        } elseif($key === 'email') {
            if (!filter_var($input, FILTER_VALIDATE_EMAIL))
                $errorsss['email'] = 'Msg 3';
        }
    }

    if ($errorsss == null)
        $errorsss = 'none';

    return view('welcome', ['errorsss' => $errorsss, 'request' => $request->input()]);
}