如何使用Laravel从一个视图向另一个视图提交表单数据

时间:2018-12-12 20:59:21

标签: php 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();

我的PagesController:

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>

1 个答案:

答案 0 :(得分:1)

问题:

问题是您的控制器正在扩展App\Http\Controllers\Controller,而后者又扩展了抽象类Illuminate\Routing\Controller as BaseControllerBaseController已经有一个名为callAction()的方法,定义如下:

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

因此,如果要在控制器中使用称为callAction()的方法,则需要提供相同的接口并接受$method$parameters数组。

解决方案:

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

因此,您做对了所有事情,只是选择了框架中其他位置已经定义的方法名称。