Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

matthewmm's avatar

MethodNotAllowed exception thrown when I try to click the import button (MaatWebsite's)

Hi guys, I am currently using Maatwebsite's import export for laravel. https://github.com/Maatwebsite/Laravel-Excel But I encounter MethodNotAllowed exception only when i use the search date diff function. (Fetching records from DB in a date range)

App\Http\Controllers\SheetController.php This is my SheetController

public function showDateDiff(Request $request)
    {
        $fd = new sheets;
        $td = new sheets;
        $fd=$request->input('from_date');
        $td=$request->input('to_date');
        session(['sheettd' => 'datediff']);
        $sheet = sheets::whereBetween('Date', [$fd, $td])->paginate(10);
        //$fetchs = Team::paginate(10); // To use $teams->links(), you need paginate();
            return view('timesheet')->with('sheet', $sheet);
    }

This is my task routes

//Tasks Routes
Route::get('/regtime/delete/{timesheet_id}','SheetController@delete');
Route::get('/regtime/edit/{timesheet_id}','SheetController@edit');
Route::get('/timesheetedit/{timesheet_id}', 'SheetController@findRecord');
Route::post('/timesheeteditt/{timesheet_id}', 'SheetController@edit');
Route::get('/regtime/add', function () {
    return view('regtime');
});
Route::get('/regtime/listing', 'SheetController@regtime');
Route::post('/regtime/add', 'SheetController@tire');
Route::post('/searchsheet','SheetController@showDateDiff');
Route::get('/searchsheettd','SheetController@today');
Route::get('/searchsheetsd','SheetController@sevenday');

resources\views\timesheet.blade.php This is my blade view. (It's kinda long)

@extends('layouts.app')

@section('content')
<div class="container">
   <div class="container">
   <style>
  td {overflow:hidden;}

  .wrapword{
white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
white-space: -pre-wrap;      /* Opera 4-6 */
white-space: -o-pre-wrap;    /* Opera 7 */
white-space: pre-wrap;       /* css-3 */
word-wrap: break-word;       /* Internet Explorer 5.5+ */
word-break: break-all;
white-space: normal;
}

.glyphicon {
    font-size: 25px;
};
</style>
    <div class="row">
    {!! Breadcrumbs::render('regtime/listing') !!}
        <div class="col-md-15 col-md-offset-0">
        @if ($message = Session::get('success'))
                    <div class="alert alert-success" role="alert">
                        {{ Session::get('success') }}
                    </div>
                @endif

                @if ($message = Session::get('error'))
                    <div class="alert alert-danger" role="alert">
                        {{ Session::get('error') }}
                    </div>
                @endif

                <?php
if (Session::has('sheettd')) {
    $dropDownVal = session()->get('sheettd');
} else {
    $dropDownVal = '';
}
?>
                <div style="border: 4px solid #a1a1a1;margin-top: 15px;padding: 20px;">
                <select id="imports2" onchange="show_selected1()">
          <option value="">Select...</option>
          <option value="today" <?php if ($dropDownVal=='today') echo 'selected="selected"'; ?>>Today</option>
          <option value="7day" <?php if ($dropDownVal=='7day') echo 'selected="selected"'; ?>>7 Day ago  </option>
          <option value="datediff" <?php if ($dropDownVal=='datediff') echo 'selected="selected"'; ?>>Custom Range</option>
        </select>
        <div id="display2"></div>
        <form id="hh" class = "hh" type="submit"</form><button>Submit</button></form>
            
<div>
<form id="importexport" action="{{ URL::to('importExcelS') }}" class="form-horizontal" method="post" enctype="multipart/form-data">{{ csrf_field() }} <input type="file" name="import_file" /> <br /> <button class="btn btn-primary">Import CSV or Excel File</button></form><br />
<a href="{{ url('downloadExcelS/xls') }}"><button id="se" class="btn btn-success btn-lg">Download Excel xls</button></a> <a href="{{ url('downloadExcelS/xlsx') }}"><button id="see" class="btn btn-success btn-lg">Download Excel xlsx</button></a> <a href="{{ url('downloadExcelS/csv') }}"><button id="seee" class="btn btn-success btn-lg">Download CSV</button></a>
</div>
</div>
            <div class="panel panel-default">
    <table  class="table table-bordered user" width = "1000" style = "table-layout: fixed" >
    <div class="panel-heading">List of Tasks</div>
 
        <tr>
            <th>Timesheet id</th>
            <th>Date Created</th>
            <th>Time in</th>
            <th>Task</th>
            <th>Time out</th>
            <th>Action</th>
        </tr>

        @foreach ($sheet as $sheets)
            <tr>
                <td>{{ $sheets->timesheet_id }}</td>
                <td>{{ $sheets->date }}</td>
                <td>{{ $sheets->time_in }}</td>
                 <td class="wrapword">{!! clean($sheets->task) !!}</td>
                 <td>{{ $sheets->time_out }}</td>
                 <td class="center"><a class ="delete" href ="{{URL::to('/regtime/delete/'. $sheets->timesheet_id) }}"><span class="glyphicon glyphicon-remove-sign"></span><a href="{{URL::to('/timesheetedit/'.$sheets->timesheet_id) }}"><span class ="glyphicon glyphicon-pencil"></span></a>
                 </td>
            </tr>
        @endforeach
    @endsection
    @section('js')    
    <script type="text/javascript">
                        $(".delete").click(function(e){
                            e.preventDefault();
                            href = this.href;

              bootbox.confirm({
        message: "Confirm delete Task?",
        buttons: {
            confirm: {
                label: 'Yes',
                className: 'btn-success'
            },
            cancel: {
                label: 'No',
                className: 'btn-danger'
            }
        },
        callback: function (result) {
            if (result == true)
                window.location = href
            else
                bootbox.alert("Task NOT deleted");
        }
    });

  });
    </script>
    <script type="text/javascript">
                        $(".hh").click(function(e){
                            e.preventDefault();
                            href = this.href;
                            var selector = document.getElementById('imports2');
                            var value = selector[selector.selectedIndex].value;
            if (value == 'today')
            {
                window.location = '{{ url("searchsheettd") }}'

            }
            else if (value == '7day')
            {
              window.location = '{{ url("searchsheetsd") }}'
            }
            else if (value == 'datediff')
            {
              //document.getElementById("hh").innerHTML = '<button type="submit" form="">Click me!</button>';
                //$('.form-control').datepicker({  

           //format: 'yyyy-mm-dd',
           //autoclose: true

         //});
            }

            else
                bootbox.alert("Please select an option!");
        
    });
              
    </script>
    <script>
          "use strict";

          function show_selected1() {
              var selector = document.getElementById('imports2');
              var value = selector[selector.selectedIndex].value;
              //document.getElementById('display').innerHTML = value;
              if (value == 'datediff')
              {
                
                document.getElementById("display2").innerHTML = '<form id="ddsubmit" action="{{ URL::to('/searchsheet/') }}" method="post" type="hidden">{{ csrf_field() }}<div class="col-md-3"><input name="from_date" id="from_date" class="form-control" placeholder="From Date" required/></div><div class="col-md-3"><input name="to_date" id="to_date" class="form-control" placeholder="To Date" required/></div><div class="col-md-5"><button class="btn btn-info" />Submit</button></div><br /></form><br />  ';
                $('.form-control').datepicker({  

           format: 'yyyy-mm-dd',
           autoclose: true

         });
              }
          }

          </script>
           <script type="text/javascript">  

        $('#from_date').datepicker({  

           format: 'yyyy-mm-dd',
           autoclose: true

         });  

        $('#to_date').datepicker({  

           format: 'yyyy-mm-dd',
           autoclose: true

         });

    </script>
    </table>
        <button type="submit" onclick="window.location='{{ url("regtime/add") }}'" class="btn btn-primary">Add another Task</button>
    <button type="submit" onclick="window.location='{{ url("home") }}'" class="btn btn-primary">Back</button> 
    <div class="text-center">
        {{ $sheet->links() }}
    </div>
    </table>
    </div>
    </div>
    </div>
    </div>


@endsection

Please do tell me if i need to provide more information!

0 likes
6 replies
edoc's avatar

I see type="hidden"

<form id="ddsubmit" action="{{ URL::to('/searchsheet/') }}" method="post" type="hidden">

Is it necessary?

matthewmm's avatar

@edoc Hi there, I can remove it and I did but it still throws the same error when I execute the ImportExcel function.

edoc's avatar

hey @mattewmm I cannot seem to find a route pointed to this url action="{{ URL::to('importExcelS') }}" in your route file above.

matthewmm's avatar

@edoc Thank you for your prompt reply! I apologize I forgot to include that in this post but it is definitely in my web.php route.

Route::get('importExportS', 'DemoController@ExportS');
Route::post('importExcelS', 'DemoController@importExcelS');
Route::get('downloadExcelS/{type}', 'DemoController@downloadExcelS');

Ah, I should probably include my DemoController. This is the function I am using in my DemoController.php

public function importExcelS(Request $request)
    {
        try{
            if($request->hasFile('import_file')){
            $path = $request->file('import_file')->getRealPath();

            $data = Excel::load($path, function($reader) {})->get();

            if(!empty($data) && $data->count()){
                $insert = array();
                foreach ($data->toArray() as $key => $v) {
                        
                    array_push($insert, array('date' => $v['date'], 'time_in' => $v['time_in'], 'task' => $v['task'], 'time_out' => $v['time_out']));
                    
                }

                
                if(!empty($insert)){
                    sheets::insert($insert);
                    return back()->with('success','Insert Timesheet Record successfully.');
                }

            }

        }
        }
        catch (\Exception $f)
        {
            return back()->with('error','Please Check your file, Something is wrong there.');
        }

        return back()->with('error','Please Check your file, Something is wrong there.');
    }

matthewmm's avatar
matthewmm
OP
Best Answer
Level 1

It's okay I'm just gonna leave this here. I solved it by changing the method get to resource by changing

Route::post('/searchsheet','SheetController@showDateDiff');

to

Route::resource('/searchsheet','SheetController@showDateDiff');

Please or to participate in this conversation.