我无法在视图html表单操作标记中传递url。
<form method="post" action="??what to write here??" accept-charset="UTF-8">
我想将其操作设置为控制器中WelcomeController@log_in
文件中的WelcomeController
函数。
以下是我的路线:
Route::get('/','WelcomeController@home');
Route::post('/', array('as' => 'log_in', 'uses' => 'WelcomeController@log_in'));
Route::get('home', 'HomeController@index');
提交后保留相同的网址
http://localhost:8000/
主要错误行
Whoops, looks like something went wrong.
之后有1/1 TokenMismatchException in compiled.php line 2440:
答案 0 :(得分:28)
您可以使用action()
帮助程序生成路线的网址:
<form method="post" action="{{ action('WelcomeController@log_in') }}" accept-charset="UTF-8">
请注意,Laravel 5默认安装已经为整个身份验证过程提供了视图和控制器。只需在全新安装时转到/home
,您就会被重定向到登录页面。
另请务必阅读Authentication section in the docs
你现在得到的错误(TokenMismatchException
)是因为Laravel有CSRF protection out of the box
要使用它(并使错误消失),请在表单中添加隐藏字段:
<input name="_token" type="hidden" value="{{ csrf_token() }}"/>
或者,您也可以通过从'App\Http\Middleware\VerifyCsrfToken'
$middleware
数组中删除app/Http/Kernel.php
来停用CSRF保护
答案 1 :(得分:6)
如果你想从表单操作中调用控制器,那时候使用下面的代码:
<form action="{{ action('SchoolController@getSchool') }}" >
此处SchoolController
是控制器名称,getSchool
是方法名称,您必须在方法名称之前使用get
或post
,这应与表单标记中的相同。
答案 2 :(得分:5)
1)在Laravel 5中,删除了表单助手。您需要先安装laravel集合。
参考链接: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' => '/')) }}
答案 3 :(得分:4)
使用action="{{ action('WelcomeController@log_in') }}"
然而,TokenMismatchException意味着您在表单中缺少CSRF令牌。
您可以使用<input name="_token" type="hidden" value="{{ csrf_token() }}">
答案 4 :(得分:4)
对于Laravel2020。好吧,示例:
<form class="modal-content animate" action="{{ url('login_kun') }}" method="post">
@csrf // !!! attention - this string is a must
....
</form>
然后在web.php中:
Route::post("/login_kun", "LoginController@login");
还有一个新创建的LoginController:
public function login(Request $request){
dd($request->all());
}
您已经完成我的朋友了。
答案 5 :(得分:3)
{{ Form::open(array('action' => "WelcomeController@log_in")) }}
...
{{ Form::close() }}
答案 6 :(得分:2)
以下情况应该有效。
{{ Form::open( array('url' => action('WelcomeController@log_in'), 'files'=>true,'method'=>'post') ) }}
...
{{ Form::close() }}
答案 7 :(得分:2)
您需要为路线设置一个名称。 像这样:
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="/" >
答案 8 :(得分:1)
我想在我的应用程序中存储帖子,因此我创建了一个包含以下资源的帖子控制器(PostsController):
php artisan make:controller PostsController --resource
已使用执行CRUD应用程序所需的所有方法创建了控制器,然后将以下代码添加到了 routes 文件夹的web.php
中:
Route::resource('posts', 'PostsController');
我通过以下方法解决了 form action 问题:
php artisan route:list
posts.store
action="{{route('posts.store')}}"
而不是action="??what to write here??"
答案 9 :(得分:1)
表单发布操作:
<form method="post" action="{{url('login')}}" accept-charset="UTF-8">
更改路线: 在路由-> Web.php
Route::post('login','WelcomeController@log_in');
答案 10 :(得分:0)
Laravel 5.8 步骤1:转到路径route / api.php添加: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>
答案 11 :(得分:-1)
您的表单也缺少'{{csrf_field()}}'