在 Lumen 控制器中验证电子邮件和 return JSON

Validate email and return JSON in Lumen Controller

我正在尝试在使用 Lumen 构建的小应用程序中使用 PHP FILTER_VALIDATE_EMAIL 验证电子邮件地址。

我在提交表单时发送一个 AJAX GET 请求,然后应该使用 newsletterController.php 中的代码进行验证,如果我在 valid_email('email@email.com') 中硬编码电子邮件地址,则验证有效,我无法通过变量 $email.

传递表单中的电子邮件地址

如何让 FILTER_VALIDATE_EMAIL 正常工作并 return 得到适当的响应?

NewsletterController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class NewsletterController extends Controller
{
    public function subscribe(Request $request)
    {
        $email = $request->input('email');


        function valid_email($email) {

            return !!filter_var($email, FILTER_VALIDATE_EMAIL);


        }

        if( valid_email($email) ) {

            return response()->json(["valid"]);



        } else {

            return response()->json(["invalid"]);

        }

    }

}

routes.php

$app->get('newsletter/subscribe', 'NewsletterController@subscribe');

AJAX 通过 jQuery

调用
$(".submit-email").click(function( event ){
    event.preventDefault();
    $.get("newsletter/subscribe", function(data, status){
        console.log("data: " + data + "\nStatus: " + status);
    })
    .done(function() {
        //console.log( "done" );
    })
    .fail(function() {
        console.log( "error" );
    })
    .always(function() {
        //console.log( "finished" );
    });            
});

表格

<form class="join-newsletter">
    <input name="email" type="email" placeholder="Enter your email address" class="email-address">
    <input type="submit" value="Subscribe" class="submit-email button">
</form>

我看到你没有将电子邮件输入发送到那个控制器。

解决方案 1:

$.get // should send the email via query string. $request->input('email'); -> change to $request->query('email');

解决方案 2:

$.get -> $.post, set the request input email for it also Change the route method to post

还有一点,您可以先不使用 ajax 进行测试(通过表单提交),然后在完成基本过程后应用 jquery。