簡體   English   中英

laravel發布->控制器

[英]laravel post -> controller

我不明白為什么下面的代碼不起作用:

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'; 線。

您能幫我解決一下嗎?

基本上,您不能使用對象類型$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()]);

你的問題就在這里

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

如果$errorsss是一個空數組,則$errorsss == null將返回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()]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM