验证电子邮件并在Lumen Controller中返回JSON

时间:2018-07-28 00:19:54

标签: php ajax lumen

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

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

如何使FILTER_VALIDATE_EMAIL正常工作并返回适当的回复?

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');

通过jQuery进行AJAX调用

$(".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 个答案:

答案 0 :(得分:1)

我发现您没有将电子邮件输入发送到该控制器。

解决方案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。