【问题标题】:Adding form action in html in laravel在 laravel 的 html 中添加表单动作
【发布时间】:2015-05-13 02:38:10
【问题描述】:

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

【问题讨论】:

  • 你使用的是哪个框架?

标签: html forms url laravel action


【解决方案1】:

您可以使用 action() 帮助器生成路由的 URL:

<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/Kernel.php 中的 $middleware 数组中删除 'App\Http\Middleware\VerifyCsrfToken' 来禁用 CSRF 保护

【讨论】:

  • 主页开始出现,但点击提交按钮后并没有转到该页面
  • 'log_in', 'uses' => 'WelcomeController@log_in'));
  • //Route::post('/dashboad', array('as' => 'dashboard', 'uses' => 'WelcomeController@dashboard')); //Route::get('/logout', array('as' => 'logout', 'uses' => 'WelcomeController@logout')); //Route::get('/', 'WelcomeController@log_in');路线::get('home', 'HomeController@index'); //Route::controllers(['auth' => 'Auth\AuthController','password' => 'Auth\PasswordController']);
  • 这里是routes.php文件分两部分
  • 您可以编辑您的问题。请这样做并添加格式正确的代码
【解决方案2】:

Laravel 5.8

第一步:进入路径routes/api.php添加:

Route::post('welcome/login', 'WelcomeController@login')->name('welcome.login');

Step2:进入路径文件查看

<form method="POST" action="{{ route('welcome.login') }}">
</form>

结果html

<form method="POST" action="http://localhost/api/welcome/login">

<form>

【讨论】:

    【解决方案3】:

    如果您想从表单操作调用控制器,则使用以下代码:

    <form action="{{ action('SchoolController@getSchool') }}"  >
    

    这里SchoolController是控制器名,getSchool是方法名,方法名前必须使用getpost,与表单标签中的相同。

    【讨论】:

      【解决方案4】:

      1) 在 Laravel 5 中,表单助手被移除了。你需要先安装 laravel 集合。

      参考链接:https://laravelcollective.com/docs/5.1/html

      {!! Form::open(array('route' => 'log_in')) !!}
      

      {!! Form::open(array('route' => '/')) !!}
      

      2) 对于 laravel 4,表单助手已经存在

      {{ Form::open(array('url' => '/')) }}
      

      【讨论】:

        【解决方案5】:

        使用action="{{ action('WelcomeController@log_in') }}"

        但是 TokenMismatchException 意味着您的表单中缺少 CSRF 令牌。

        你可以使用&lt;input name="_token" type="hidden" value="{{ csrf_token() }}"&gt;添加这个

        【讨论】:

        • 这个答案与被接受和投票最多的答案基本相同......细节较少。投票这个答案比添加你自己的答案更好
        【解决方案6】:

        对于 Laravel 2020。好的,举个例子:

        <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());
        }
        

        你已经完成了我的朋友。

        【讨论】:

        【解决方案7】:
        {{ Form::open(array('action' => "WelcomeController@log_in")) }}
        ...
        {{ Form::close() }}
        

        【讨论】:

        • 稍微懂一点编码知识的人都能看懂。
        【解决方案8】:

        表单发布操作:

        <form method="post" action="{{url('login')}}" accept-charset="UTF-8">
        

        改变你的路线: 在 Routes -> Web.php

        Route::post('login','WelcomeController@log_in');
        

        【讨论】:

        • 在我的 Lumen 安装中,这里很多人提到的 action() 函数返回错误,但 url() 函数有效。
        【解决方案9】:

        您需要为您的路线设置一个名称。 像这样:

        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="/" >
        

        【讨论】:

          【解决方案10】:

          以下应该可以工作。

          {{  Form::open( array('url' => action('WelcomeController@log_in'), 'files'=>true,'method'=>'post') )  }}
          
          ...
          {{ Form::close() }}
          

          【讨论】:

            【解决方案11】:

            在 Laravel 8 中:

            第 1 步:在刀片文件中:

            <form action="{{ route('authLogin')  }}" method="post">
              @csrf
              ....
            </form>
            

            第 2 步:然后在 web.php 中:

            use App\Http\Controllers\UsersController;
            
            Route::post('login-user', [UsersController::class, 'login'])->name('authLogin');
            

            第 3 步:在 UsersController 中:

            public function login(Request $request){
                dd($request->all());
            }
            

            乐于分享。感谢您提出这个问题。

            ** 更多信息请见https://laravel.com/docs/8.x/routing#generating-urls-to-named-routes

            【讨论】:

              【解决方案12】:

              我想在我的应用程序中存储一个帖子,所以我创建了一个帖子控制器 (PostsController),其中包含资源:

              php artisan make:controller PostsController --resource

              控制器是使用执行 CRUD 应用程序所需的所有方法创建的,然后我将以下代码添加到 routes 文件夹中的web.php

              Route::resource('posts', 'PostsController');

              我通过这样做解决了表单操作问题:

              1. 我通过php artisan route:list检查了我的路由列表
              2. 我在终端的结果表中搜索store方法的路由名,在posts.storename下找到了
              3. 我将此添加到表单的 action 属性action="{{route('posts.store')}}" 而不是 action="??what to write here??"

              【讨论】:

                【解决方案13】:

                您的表单也丢失了'{{csrf_field()}}'

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-07-16
                  • 2016-05-28
                  • 2015-02-04
                  • 1970-01-01
                  • 2018-01-22
                  • 2015-01-09
                  • 2018-04-15
                  相关资源
                  最近更新 更多