首页 > 解决方案 > 如何使用 Laravel 将表单数据从一个视图提交到另一个视图

问题描述

我是 Laravel 的新手,我想弄清楚如何将数据从一个视图提交到另一个视图。我试图在这里阅读一些其他类似的问题并观看一些关于此的视频,但我仍然无法得到它。基本上我有 3 个提交按钮,并且传递的数据来自表单。我在控制器中设置了一条新路由和一个函数,但出现错误:Declaration of App\Http\Controllers\PagesController::CallAction() should be compatible with Illuminate\Routing\Controller::callAction($method, $parameters). 但是我认为我遵循正确的格式。

这是我的 web.php:

Route::group(['middleware' => ['auth']], function() {
  // CallCenter page
 public function CallCenter() {
    return view('Pages.CallCenter');
 }

 Route::post(
  '/CallAction/', 'PagesController@CallAction'
 );

});

Auth::routes();

我的页面控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PagesController extends Controller
{

    // CallCenter page
    public function CallCenter() {
        return view('Pages.CallCenter');
    }
    // CallAction page
    public function CallAction() {
      return view('Pages.CallAction');
    }

}

来自:

 <form action="/CallAction" method="post">
        @csrf
            <table style="width:70%">
                <tr>
                    <td width="33%">Date<BR>
                        <?php
                            date_default_timezone_set('America/Chicago');
                            echo date('m/d/y');
                        ?>
                    </td>
                    <td width="33%">Time<BR>
                        <?php
                            date_default_timezone_set('America/Chicago');
                            echo date('h:i');
                        ?>
                    </td>
                    <td width="33%">Campus<BR>
                        <select name="campus">
                            <option disabled selected value>-- Campus --</option>
                            <option value="XXX1"></option>
                            <option value="XXX2"></option>
                            <option value="XXX3"></option>
                            <option value="XXX4"></option>
                            <option value="XXX5"></option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td width="33%">Extension<BR>
                        <input name="extension" type="text" size="15">
                    </td>
                    <td width="33%">Name<BR>
                        <input name="customerName" type="text" size="40">
                    </td>
                    <td width="33%">Email<BR>
                        <input name="customerEmail" type="text" size="50">
                    </td>
                </tr>
                <tr>
                    <td colspan="3">Description<BR>
                        <textarea name="description" rows="2" cols="125"></textarea>
                    </td>
                </tr>
                <tr>
                    <td width="33%"><input type="submit" name="convert" value="Convert to Ticket"></td>
                    <td width="33%"><input type="submit" name="close" value="Close Issue"></td>
                    <td width="33%"><input type="submit" name="hold" value="Put Issue on Hold"></td>
            </table>
    </form>

标签: phplaravel

解决方案


问题:

问题是您的 Controller 正在扩展App\Http\Controllers\Controller,而后者又扩展了 abstract class Illuminate\Routing\Controller as BaseController。这BaseController已经有一个称为callAction()定义的方法,如下所示:

public function callAction($method, $parameters)
{
    return call_user_func_array([$this, $method], $parameters);
}

所以如果你想callAction()在你的控制器中调用一个方法,你需要提供相同的接口并接受一个$method和一个$parameters数组。

解决方案:

快速的解决方案是将您的控制器方法重命名CallAction()为与父类上的方法名称不冲突的名称......CallMyAction()然后更新您的路由文件以匹配新名称。

所以你做的一切都是正确的,你只是选择了一个已经在框架中其他地方定义的方法名称。


推荐阅读