【问题标题】:Form not showing due to routing problem in action parameter由于动作参数中的路由问题,表单未显示
【发布时间】:2020-08-12 11:53:41
【问题描述】:

我正在为我的公司开发一个 Excel 导入模块,作为 CRM 的一部分。我想导入一个excel表。我使用 Maatwebsite Excel 包,版本 3.1。我想显示表格,然后上传一张表格。但是我什至无法达到这一点。我已经确定问题出在表单路由中,只是不确定我到底错过了什么。

我用来显示页面的路由(索引工作正常)

用于导入 Excel 工作表的表单

菜单中的导航栏链接

DataController(我试图从中调用导入方法)

如果您知道可能出了什么问题,请告诉我,这真是令人沮丧!

路线代码:

Route::get('importeren', 'Datacontroller@index');

Route::post('import', 'Datacontroller@import');
<div class="container-fluid">
    <form action="import" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="import_file">
    <br>
    <input type="submit" value="Import">
    </form>
</div>

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Imports\DataImport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;

class DataController extends Controller
{
    public function index(){
        return view('importeren');
    }

    public function import(Request $request){

        Excel::import(new DataImport(), $request->file('import_file'));

         return redirect()->route('/home');
    }
}

【问题讨论】:

  • route() 助手用于命名路由
  • 所以我可以这样做:
    它会起作用吗?思考:我必须指定吗?就像:action="DataController@import"
  • 为您的路线命名。您在表单操作中使用了 route() 助手,但您的路线没有名称。抱歉,由于代码在图片中,我无法复制粘贴给您看。
  • 我可以给你粘贴,一秒钟

标签: laravel laravel-routing maatwebsite-excel


【解决方案1】:

不要使用 route() 方法,因为你没有定义任何路由名称,使用类似: form action="/import" method="POST" enctype="multipart/formdata">

【讨论】:

  • 或者更好的是,命名路线
【解决方案2】:

你可以give a name to your route

Route::post('import', 'Datacontroller@import')->name('import');

并保持表单操作与route() helper保持原样:

<div class="container-fluid">
    <form action="{{ route('import') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="import_file">
    <br>
    <input type="submit" value="Import">
    </form>
</div>

您也可以使用 url() 帮助器并留下没有名称的路线,但我强烈建议您选择为您的路线命名。

<form action="{{ url('import') }}" method="POST" enctype="multipart/form-data">

请注意,在控制器返回中,您还使用了redirect to a named route,因此我建议您为该路由命名并在重定向中使用该名称。例如:

Route::get('home', 'SomeController@someMethod')->name('home');

return redirect()->route('home');

【讨论】:

    【解决方案3】:

    你应该只使用带有路由名称的 route(),改用这个: return redirect('/home');

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多