ビュー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:
があります
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保護を無効にすることもできます。
次のコードを使用したフォームアクションからコントローラーを呼び出したい場合:
<form action="{{ action('SchoolController@getSchool') }}" >
ここでSchoolController
はコントローラー名であり、getSchool
はメソッド名です。フォームタグと同じメソッド名の前にget
またはpost
を使用する必要があります。
action="{{ action('WelcomeController@log_in') }}"
を使用します
ただし、TokenMismatchExceptionは、フォームにCSRFトークンがないことを意味します。
<input name="_token" type="hidden" value="{{ csrf_token() }}">
を使用してこれを追加できます
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' => '/')) }}
{{ Form::open(array('action' => "WelcomeController@log_in")) }}
...
{{ Form::close() }}
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>
ルートに名前を設定する必要があります。このような:
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() }}
フォームポストアクション:
<form method="post" action="{{url('login')}}" accept-charset="UTF-8">
ルートを変更します:ルート-> Web.php
Route::post('login','WelcomeController@log_in');
アプリケーションに投稿を保存したいので、リソースを含む投稿のコントローラー(PostsController)を作成しました。
php artisan make:controller PostsController --resource
コントローラーは、CRUDアプリを実行するために必要なすべてのメソッドで作成され、次のコードをroutesフォルダーのweb.php
に追加しました:
Route::resource('posts', 'PostsController');
これを行うことでフォームアクション問題を解決しました。
php artisan route:list
を実行してルーティングリストを確認しましたposts.store
のnameの下で見つけましたaction="??what to write here??"
の代わりにaction="{{route('posts.store')}}"
フォームにも '{{csrf_field()}}'がありません