在laravel中的html中添加表单操作

时间:2015-03-11 10:40:10

标签: html forms url laravel action

我无法在视图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:

12 个答案:

答案 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是方法名称,您必须在方法名称之前使用getpost,这应与表单标记中的相同。

答案 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 问题:

  1. 我通过执行php artisan route:list
  2. 检查了路由列表
  3. 我在终端的结果表中搜索了 store方法的路由名称,并在posts.store
  4. 名称下找到了它。 >
  5. 我将此添加到了表单的 action属性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()}}'