2016-12-14 10 views
0

私はphpとlaravelの初心者です。私は最近、自分のウェブサイトの一番下にフォームを作成しました。送信ボタンをクリックすると、データが電子メールアドレスに送信されます。Laravel PHP、idにリダイレクトしようとしています

ただし、正しく入力して送信をクリックしないと、ページが最新表示され、ページの上部に戻ります。フォームを正しく送信すると、/ contactに行きます。

私は、スクリーンをリフレッシュするのではなく、ウェブページ上の同じ位置に(画面上のフォームを使用して)ページを維持することを迫られています。フォームが正しく提出された場合と同じですが、画面は依然として維持したいと思います。

ルート/ web.php:

Route::get('/', '[email protected]'); 

Route::get('about', '[email protected]'); 

Route::get('contact', 
    ['as' => 'contact', 'uses' => '[email protected]']); 
Route::post('contact', 
    ['as' => 'contact_store', 'uses' => '[email protected]']); 

ContactFormRequest.php:

<?php 

namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 

class ContactFormRequest extends FormRequest 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      'name' => 'required', 
      'email' => 'required|email', 
      'number' => 'required', 
      'message' => 'required', 
     ]; 
    } 
} 

AboutController.php:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests\ContactFormRequest; 

class AboutController extends Controller 
{ 
     public function create() 
    { 
     return view('pages.contact'); 
    } 

    public function store(ContactFormRequest $request) 
    { 
     \Mail::send('emails.contact', 
      array(
       'name' => $request->get('name'), 
       'email' => $request->get('email'), 
       'number' => $request->get('number'), 
       'user_message' => $request->get('message') 
       ), function($message) 
     { 
      $message->from('[email protected]'); 
      $message->to('[email protected]', 'Admin')->subject('Testing'); 
     }); 

     return \Redirect::route('contact')->with('message', 'Thanks for contacting us!'); 
    } 
} 

contact.blade.php

<div class="one-half"> 
    <ul> 
     @foreach($errors->all() as $error) 
      <li>{{ $error }}</li> 
     @endforeach 
    </ul> 

    {!! Form::open(array('route' => 'contact_store', 'class' => 'form')) !!} 
    <div class="form-group"> 
     {!! Form::text('name', null, 
      array('required', 
        'class'=>'form-control', 
        'placeholder'=>'Your name')) !!} 
    </div> 

    <div class="form-group"> 
     {!! Form::text('email', null, 
      array('required', 
        'class'=>'form-control', 
        'placeholder'=>'Your e-mail address')) !!} 
    </div> 

    <div class="form-group"> 
     {!! Form::number('number', null, 
      array('required', 
        'class'=>'form-control', 
        'placeholder'=>'Your Number')) !!} 
    </div> 

    <div class="form-group"> 
     {!! Form::text('message', null, 
      array('required', 
        'class'=>'form-control', 
        'placeholder'=>'Your message')) !!} 
    </div> 

    <div class="form-group"> 
     {!! Form::submit('Contact Us!', 
      array('class'=>'form-button btn btn-primary')) !!} 
    </div> 
    {!! Form::close() !!} 
</div> 

私もstackoverflowを使用することに新しいので、私は何かを見逃したり、間違って何かをした場合は、先にお詫びします。もっと必要なものがあれば教えてください。

答えて

0

は本当にあなたの問題を理解し、しかし、あなたのstore()方法でこれを追加しようとすることはできません。

return \Redirect::back()->with('message', 'Thanks for contacting us!'); 

しかし、あなたが提出する/ページを更新せずにフォームを検証するように見えますので、唯一の解決策これはAJAXリクエストを使用するためです。

+0

こんにちはアルトゥルLaravel 5.3を使用している場合は、あなたの答えをありがとうございました。私はストアメソッドにそのコードを追加して、以前と同じようにしました。ただし、「ページを更新せずにフォームをサブミット/検証する必要があるようです。そのための唯一の解決策はAJAXリクエストを使用することです」これは正しいので、私はAJAXリクエストを調べます。ありがとう。 – dannyf

+0

ようこそ。 –

0

これは何かがあります。 validationヘルパーを使用しています。このような

function store(ContactFormRequest $request) 
    { 
    $this->validate($request, [ 
     'name' => 'required', 
     'email' => 'required', 
     'number' => 'required', 
     'message' => 'required', 
    ]); 

    // If !$this->validate Laravel will automatic return to the previous page (the form page) 
    // And you can grab the errors with $errors->first('name'), $errors->first('email') etc 

     \Mail::send('emails.contact', 
      array(
       'name' => $request->get('name'), 
       'email' => $request->get('email'), 
       'number' => $request->get('number'), 
       'user_message' => $request->get('message') 
       ), function($message) 
     { 
      $message->from('[email protected]'); 
      $message->to('[email protected]', 'Admin')->subject('Testing'); 
     }); 

     return \Redirect::route('contact')->with('message', 'Thanks for contacting us!'); 
    } 

グラブエラー:validationについてここではあなたのドキュメント

@if ($errors->has('message')) 
    <span class="help-block"> 
     <strong>{{ $errors->first('message') }}</strong> 
    </span> 
@endif 

、あなたが

+0

あなたの答えはアダムありがとう。私は自分のコードを上記のものに変更して、何も変更しませんでした。お詫び申し訳ありませんが私の誤りを間違って説明する必要があります。 私がしようとしているのは、ウェブユーザーがサブミットを成功裏に入力したかどうかにかかわらず、ページを表示していないかどうかを確認することです。フォームを正しく入力したことを示すメッセージがユーザーに表示されるように更新されません。または、ページが更新されますが、ユーザーをdiv idにリダイレクトします。例えばボタンをクリックしたときにボタンをクリックすると、そのページの下のIDに移動することができます。 – dannyf

関連する問題