I am unable to pass url in views html form action tag.
<form method="post" action="??what to write here??" accept-charset="UTF-8">
I want to set it's action to WelcomeController@log_in function in WelcomeController file in controllers.
Here are my routes:
Route::get('/','WelcomeController@home');
Route::post('/', array('as' => 'log_in', 'uses' => 'WelcomeController@log_in'));
Route::get('home', 'HomeController@index');
After submitting it keeps the same url
http://localhost:8000/
And the main error line
Whoops, looks like something went wrong.
After that there is 1/1 TokenMismatchException in compiled.php line 2440:
13 Answers 13
You can use the action() helper to generate an URL to your route:
<form method="post" action="{{ action('WelcomeController@log_in') }}" accept-charset="UTF-8">
Note that the Laravel 5 default installation already comes with views and controllers for the whole authentication process. Just go to /home on a fresh install and you should get redirected to a login page.
Also make sure to read the Authentication section in the docs
The error you're getting now (TokenMismatchException) is because Laravel has CSRF protection out of the box
To make use of it (and make the error go away) add a hidden field to your form:
<input name="_token" type="hidden" value="{{ csrf_token() }}"/>
Alternatively you can also disable CSRF protection by removing 'App\Http\Middleware\VerifyCsrfToken' from the $middleware array in app/Http/Kernel.php
8 Comments
Laravel 5.8
Step 1: Go to the path routes/api.php add:
Route::post('welcome/login', 'WelcomeController@login')->name('welcome.login');
Step2: Go to the path file view
<form method="POST" action="{{ route('welcome.login') }}">
</form>
Result html
<form method="POST" action="http://localhost/api/welcome/login">
<form>
1 Comment
if you want to call controller from form action that time used following code:
<form action="{{ action('SchoolController@getSchool') }}" >
Here SchoolController is a controller name and getSchool is a method name, you must use get or post before method name which should be same as in form tag.
Comments
1) In Laravel 5 , form helper is removed .You need to first install laravel collective .
Refer link: https://laravelcollective.com/docs/5.1/html
{!! Form::open(array('route' => 'log_in')) !!}
OR
{!! Form::open(array('route' => '/')) !!}
2) For laravel 4, form helper is already there
{{ Form::open(array('url' => '/')) }}
Comments
Use action="{{ action('WelcomeController@log_in') }}"
however TokenMismatchException means that you are missing a CSRF token in your form.
You can add this by using <input name="_token" type="hidden" value="{{ csrf_token() }}">
1 Comment
For Laravel 2020. Ok, an example:
<form class="modal-content animate" action="{{ url('login_kun') }}" method="post">
@csrf // !!! attention - this string is a must
....
</form>
And then in web.php:
Route::post("/login_kun", "LoginController@login");
And one more in new created LoginController:
public function login(Request $request){
dd($request->all());
}
and you are done my friend.
1 Comment
In Laravel 8:
Step 1: In the blade file:
<form action="{{ route('authLogin') }}" method="post">
@csrf
....
</form>
Step 2: And then in web.php:
use App\Http\Controllers\UsersController;
Route::post('login-user', [UsersController::class, 'login'])->name('authLogin');
Step 3: And in the UsersController:
public function login(Request $request){
dd($request->all());
}
Happy to share. Thanks to ask this question.
** For more information, please see https://laravel.com/docs/8.x/routing#generating-urls-to-named-routes
Comments
{{ Form::open(array('action' => "WelcomeController@log_in")) }}
...
{{ Form::close() }}
1 Comment
You need to set a name to your Routes. Like this:
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');
I just put name on Routes that need this. In my case, to call from tag form at blade template. Like this:
<form action="{{ route('home.index') }}" >
Or, You can do this:
<form action="/" >
Comments
Form Post Action :
<form method="post" action="{{url('login')}}" accept-charset="UTF-8">
Change your Route : In Routes -> Web.php
Route::post('login','WelcomeController@log_in');
1 Comment
action() function mentioned by many here returned an error, but the url() function worked.The following should work.
{{ Form::open( array('url' => action('WelcomeController@log_in'), 'files'=>true,'method'=>'post') ) }}
...
{{ Form::close() }}
Comments
I wanted to store a post in my application, so I created a controller of posts (PostsController) with the resources included:
php artisan make:controller PostsController --resource
The controller was created with all the methods needed to do a CRUD app, then I added the following code to the web.php in the routes folder :
Route::resource('posts', 'PostsController');
I solved the form action problem by doing this:
- I checked my routing list by doing
php artisan route:list - I searched for the route name of the store method in the result table in the terminal and I found it under the name of
posts.store - I added this to the action attribute of my form:
action="{{route('posts.store')}}"instead ofaction="??what to write here??"
Comments
Your form is also missing '{{csrf_field()}}'