可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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:
回答1:
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
回答2:
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.
回答3:
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' => '/')) }}
回答4:
{{ Form::open(array('action' => "WelcomeController@log_in")) }}
...
{{ Form::close() }}
回答5:
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() }}">
回答6:
The following should work.
{{ Form::open( array('url' => action('WelcomeController@log_in'), 'files'=>true,'method'=>'post') ) }}
...
{{ Form::close() }}
回答7:
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="/" >
回答8:
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');
回答9:
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 of action="??what to write here??"
回答10:
Your form is also missing '{{csrf_field()}}'