Laravel, добавление данных в базу данных после проверки ReCaptcha - PullRequest
0 голосов
/ 11 марта 2019

Я использую ReCaptcha в своем проекте Laravel, сделав это с помощью этого учебника .

Мне нужно создать страницу, где пользователь может опубликовать свое сообщение после проверки капчи.Я создал модальное диалоговое окно, в котором пользователь может заполнить данные следующим образом:

<form class="form-horizontal" action="" method="post">
              <div class="form-group error">
                <label for="messageName" class="col-sm-3 control-label">Name</label>
                <div class="col-sm-9">
                  <input type="text" class="form-control has-error" id="name" name="name" placeholder="Your name" value="" 
                  ng-model="message.name" ng-required="true">
                  <span class="help-inline" 
                  ng-show="GBM.text.$invalid && GBM.text.$touched">Required</span>
                </div>
              </div>
              <div class="form-group error">
                <label for="messageEmail" class="col-sm-3 control-label">Email</label>
                <div class="col-sm-9">
                  <input type="email" class="form-control has-error" id="email" name="email" placeholder="E-mail" value="" 
                  ng-model="message.email" ng-required="true">
                  <span class="help-inline" 
                  ng-show="GBM.email.$invalid && GBM.email.$touched">Required</span>
                </div>
              </div>
              <div class="form-group error">
                <label for="messageLink" class="col-sm-3 control-label">Web</label>
                <div class="col-sm-9">
                  <input class="form-control" rows="3" class="form-control has-error" id="web" name="web" placeholder="Link for your web" value="" ng-model="message.web" ng-required="false" >
                </div>                    
              </div>

              <div class="form-group error">
                <label for="messageText" class="col-sm-3 control-label">Comment</label>
                <div class="col-sm-9">
                  <textarea class="form-control" rows="3" class="form-control has-error" id="comment" name="comment" placeholder="Your comment" value="" ng-model="message.text" ng-required="true" ></textarea> 
                  <span class="help-inline" 
                  ng-show="GBM.text.$invalid && GBM.text.$touched">Required</span>
                </div>                    
              </div>

                {!! csrf_field() !!}
                <!-- recaptcha -->
                {{Request::is('contactd')}}
                <div class="form-group">

                    <div class="col-md-9">
                        <div class="g-recaptcha" data-sitekey="{{env('GOOGLE_RECAPTCHA_KEY')}}"></div>
                    </div>
                </div>
                <!-- Button -->
                <div class="form-group">
                    <label class="col-md-9 control-label"></label>
                    <div class="col-md-9">
                        <button type="submit" name="send" class="btn btn-primary btn-lg btn-block">Add new message <span class="fa fa-paper-plane-o"></span></button>
                    </div>
                </div>
            </form>

Для маршрута, который я получил, вот так: Route::post('contact','ContactController@store');

И вот проблема, по моемуконтроллер я получил этот код для проверки капчи:

public function store(ReCaptchataTestFormRequest $request){<br> return "Captcha done right! ";}

И этот код для сохранения данных в базу данных

    public function store(Request $request)
{
    $this->validate($request, [ 'name' => 'required|max:255' ]);
    $this->validate($request, [ 'email' => 'required | email' ]);
    $this->validate($request, [ 'comment' => 'required' ]);

    $ip = $_SERVER['REMOTE_ADDR'];
    $browser = $_SERVER['HTTP_USER_AGENT'];

    $guestbook = Guest_books::create([
        'name' => $request->input('name'),
        'email' => $request->input('email'),
        'web' => $request->input('web'),
        'comment' => $request->input('comment'),
        'ip' => $ip,
        'browser' => $browser
    ]);

    return $guestbook;
}

Итак, вопрос: что писать вКонтроллер для проекта, чтобы проверить Captcha и затем отправить его в базу данных?

1 Ответ

0 голосов
/ 11 марта 2019

Учебное пособие, которому вы руководствовались, научит вас создавать настраиваемое правило проверки , которое вы затем сможете использовать при проверке запросов либо через запрос формы , либо непосредственно в ваш контроллер .

Ошибка, которую вы допустили в своем контроллере, заключается в том, что вы вызывали validate несколько раз, вместо этого вы должны передать ему массив, содержащий все ваши правила, включая правило recaptcha, например:

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required|max:255',
        'email' => 'required|email',
        'comment' => 'required',
        'g-recaptcha-response' => 'required|recaptcha',
    ]);

    // ...
}

Кроме того, обратите внимание, что метод store всегда должен возвращать перенаправление.

...