web-dev-qa-db-ja.com

laravelでHTMLにフォームアクションを追加する

ビューhtmlフォームアクションタグでURLを渡すことができません。

<form method="post" action="??what to write here??" accept-charset="UTF-8">

コントローラのWelcomeControllerファイルのWelcomeController@log_in関数にアクションを設定したい。

私のルートは次のとおりです。

Route::get('/','WelcomeController@home');
Route::post('/', array('as' => 'log_in', 'uses' => 'WelcomeController@log_in'));
Route::get('home', 'HomeController@index');

送信後、同じURLを保持します

http://localhost:8000/

そして主なエラー行

Whoops, looks like something went wrong.

その後1/1 TokenMismatchException in compiled.php line 2440:があります

20
Shahid Rafiq

action()ヘルパーを使用して、ルートへのURLを生成できます。

<form method="post" action="{{ action('WelcomeController@log_in') }}" accept-charset="UTF-8">

Laravel 5デフォルトのインストールには、認証プロセス全体のビューとコントローラーが既に付属しています。新規インストールで/homeに移動すると、ログインページにリダイレクトされます。

また、ドキュメントの Authenticationセクションを必ず読んでください


取得しているエラー(TokenMismatchException)は、Laravel=すぐに使用できる CSRF保護があるためです。

それを利用する(そしてエラーをなくす)には、非表示フィールドをフォームに追加します。

<input name="_token" type="hidden" value="{{ csrf_token() }}"/>

または、'App\Http\Middleware\VerifyCsrfToken'$middleware配列からapp/Http/Kernel.phpを削除して、CSRF保護を無効にすることもできます。

30
lukasgeiter

次のコードを使用したフォームアクションからコントローラーを呼び出したい場合:

<form action="{{ action('SchoolController@getSchool') }}"  >

ここでSchoolControllerはコントローラー名であり、getSchoolはメソッド名です。フォームタグと同じメソッド名の前にgetまたはpostを使用する必要があります。

6
Jalpesh Khakhi

action="{{ action('WelcomeController@log_in') }}"を使用します

ただし、TokenMismatchExceptionは、フォームにCSRFトークンがないことを意味します。

<input name="_token" type="hidden" value="{{ csrf_token() }}">を使用してこれを追加できます

5
FireFistMedia

1)Laravel 5で、フォームヘルパーが削除されます。最初にlaravel Collectiveをインストールする必要があります。

参照リンク: https://laravelcollective.com/docs/5.1/html

{!! Form::open(array('route' => 'log_in')) !!}

OR

{!! Form::open(array('route' => '/')) !!}

2)laravel 4の場合、フォームヘルパーは既に存在します

{{ Form::open(array('url' => '/')) }}
5
shalini
{{ Form::open(array('action' => "WelcomeController@log_in")) }}
...
{{ Form::close() }}
3
Farid Movsumov

Laravel 5.8ステップ1:次のパスに移動します:routes/api.php add:Route :: post( 'welcome/login'、 'WelcomeController @ login')-> name( 'welcome.login');ステップ2:パスファイルビューに移動します

<form method="POST" action="{{ route('welcome.login') }}">
</form>

結果html

<form method="POST" action="http://localhost/api/welcome/login">

<form>
3

ルートに名前を設定する必要があります。このような:

 
 Route :: get( '/'、 'WelcomeController @ home')-> name( 'welcome.home'); 
 Route :: post( '/'、 array( 'as' => 'log_in'、 'uses' => 'WelcomeController @ log_in'))-> name( 'welcome.log_in'); 
 Route :: get( 'home'、 'HomeController @index ')-> name(' home.index '); 
 

これが必要なルートに名前を付けるだけです。私の場合、ブレードテンプレートのタグフォームから呼び出します。このような:

<form action="{{ route('home.index') }}" >

または、これを行うことができます:

<form action="/" >

以下が動作するはずです。

{{  Form::open( array('url' => action('WelcomeController@log_in'), 'files'=>true,'method'=>'post') )  }}

...
{{ Form::close() }}
2
Rio

フォームポストアクション:

<form method="post" action="{{url('login')}}" accept-charset="UTF-8">

ルートを変更します:ルート-> Web.php

Route::post('login','WelcomeController@log_in');
1
Ashish

アプリケーションに投稿を保存したいので、リソースを含む投稿のコントローラー(PostsController)を作成しました。

php artisan make:controller PostsController --resource

コントローラーは、CRUDアプリを実行するために必要なすべてのメソッドで作成され、次のコードをroutesフォルダーのweb.phpに追加しました:

Route::resource('posts', 'PostsController');

これを行うことでフォームアクション問題を解決しました。

  1. php artisan route:listを実行してルーティングリストを確認しました
  2. ターミナルの結果テーブルでstore methodのルート名を検索し、posts.storenameの下で見つけました
  3. これをフォームのaction attributeに追加しました:action="??what to write here??"の代わりにaction="{{route('posts.store')}}"
0
van_flucht

フォームにも '{{csrf_field()}}'がありません

0
user3257040