简体   繁体   中英

how to fix POST http://localhost:8000/cour 500 (Internal Server Error) laravel,ajax and Yajra pakage

How can I solve this problem, I'm working with package yajra but I don't know where I have the problem.

I'm getting a 500 (Internal Server Error)


<?php

namespace App\Http\Controllers;

use App\Cour;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
//use Validator;

class CourController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if(request()->ajax())
        {
            return datatables()->of(Cour::latest()->get())
                    ->addColumn('action', function($data){
                        $button = '<button type="button" name="edit" id="'.$data->id.'" class="edit btn btn-primary btn-sm">Edit</button>';
                        $button .= '&nbsp;&nbsp;';
                        $button .= '<button type="button" name="delete" id="'.$data->id.'" class="delete btn btn-danger btn-sm">Delete</button>';
                        return $button;
                    })
                    ->rawColumns(['action'])
                    ->make(true);
        }
        return view('cour');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $rules = array(
            'prof'    =>  'required',
            'module'     =>  'required', 
            'chapitre'    =>  'required',
             'titre'    =>  'required',
            'description'     =>  'required',
            'file' => 'required|file|max:5000|mimes:pdf,docx,doc',
            
        );

        $error = Validator::make($request->all(), $rules);

        if($error->fails())
        {
            return response()->json(['errors' => $error->errors()->all()]);
        }

        $file = $request->file('file');

        $new_name = rand() . '.' . $file->getClientOriginalExtension();

        $file->move(public_path('images'), $new_name);

        $form_data = array(
            'prof'        =>  $request->prof,
            'module'         =>  $request->module,
            'chapitre'        =>  $request->chapitre,
            'titre'         =>  $request->titre,
            'description'         =>  $request->description,
            'file'             =>  $new_name
        );

        Cour::create($form_data);

        return response()->json(['success' => 'Data Added successfully.']);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        if(request()->ajax())
        {
            $data = Cour::findOrFail($id);
            return response()->json(['data' => $data]);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {
        $file_name = $request->hidden_file;
        $file = $request->file('file');
        if($file != '')
        {
            $rules = array(
                'prof'    =>  'required',
                'module'     =>  'required',
                'chapitre'    =>  'required',
                'titre'     =>  'required',
                'description'     =>  'required',
                'file' => 'required|file|mimes:pdf,docx,doc|max:5000',
            );
            $error = Validator::make($request->all(), $rules);
            if($error->fails())
            {
                return response()->json(['errors' => $error->errors()->all()]);
            }

            $file_name = rand() . '.' . $file->getClientOriginalExtension();
            $file->move(public_path('images'), $file_name);
        }
        else
        {
            $rules = array(
                'prof'    =>  'required',
                'module'     =>  'required',
                'chapitre'    =>  'required',
                'titre'     =>  'required',
                'description'     =>  'required',
            );

            $error = Validator::make($request->all(), $rules);

            if($error->fails())
            {
                return response()->json(['errors' => $error->errors()->all()]);
            }
        }

        $form_data = array(
            'prof'        =>  $request->prof,
            'module'         =>  $request->module,
            'chapitre'        =>  $request->chapitre,
            'titre'         =>  $request->titre,
            'description'         =>  $request->description,
            'file'            =>   $file_name
        );
        Cour::whereId($request->hidden_id)->update($form_data);

        return response()->json(['success' => 'Data is successfully updated']);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $data = Cour::findOrFail($id);
        $data->delete();
    }
    public function download($file)
    {
       return response()->download('storage/images'.$file);
    }
}

cour view


<html>
 <head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Laravel 5.8 - DataTables Server Side Processing using Ajax</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script>  
  <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
 </head>
 <body>
  <div class="container">    
     <br />
     <h3 align="center">Laravel 5.8 Ajax Crud Tutorial - Delete or Remove Data</h3>
     <br />
     <div align="right">
      <button type="button" name="create_record" id="create_record" class="btn btn-success btn-sm">Create Record</button>
     </div>
     <br />
   <div class="table-responsive">
    <table class="table table-bordered table-striped" id="user_table">
           <thead>
            <tr>
                <th width="">Id</th>
                <th width=""><i class="icon_profile"></i>professeur</th>
                <th width="">module</th>
                <th width="">chapitre</th>
                <th width="">titre</th>
                <th width="">description</th>
                <th width="30%">Action</th>
            </tr>
           </thead>
       </table>
   </div>
   <br />
   <br />
  </div>
 </body>
</html>

<div id="formModal" class="modal fade" role="dialog">
 <div class="modal-dialog">
  <div class="modal-content">
   <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Add cour</h4>
        </div>
        <div class="modal-body">
         <span id="form_result"></span>
         <form method="post" id="sample_form" class="form-horizontal" enctype="multipart/form-data">
          @csrf
        
          <div class="form-group">
              <label class="col-md-4 text-right">Enseignant:</label>
              <div class="col-md-8">
                  <input type="text" name="prof" class="form-control input-lg"  placeholder="le nom du prof" />
              </div>
          </div>
       
          <div class="form-group">
              <label class="col-md-4 text-right">Module:</label>
              <div class="col-md-8">
                  <input type="text" name="module" class="form-control input-lg"  placeholder="module"/>
              </div>
          </div>
         
          <div class="form-group">
              <label class="col-md-4 text-right">Chapitre:</label>
              <div class="col-md-8">
                  <input type="text" name="chapitre" class="form-control input-lg"  placeholder="chapitre"/>
              </div>
          </div>
        
          <div class="form-group">
              <label class="col-md-4 text-right">Titre:</label>
              <div class="col-md-8">
                  <input type="text" name="titre" class="form-control input-lg"  placeholder="titre"/>
              </div>
          </div>
       
          <div class="form-group">
              <label class="col-md-4 text-right">Description:</label>
              <div class="col-md-8">
                  <input type="text" name="description" class="form-control input-lg"  placeholder="description"/>
              </div>
          </div>
      
          <div class="form-group">
              <label class="col-md-4 text-right">choisir le fichier</label>
              <div class="col-md-8">
                  <input type="file" name="file" id="file" />
                  <span id="store_image"></span>
              </div>
          </div>
         
           <div class="form-group" align="center">
            <input type="hidden" name="action" id="action" />
            <input type="hidden" name="hidden_id" id="hidden_id" />
            <input type="submit" name="action_button" id="action_button" class="btn btn-warning" value="Add" />
           </div>
         </form>
        </div>
     </div>
    </div>
</div>

<div id="confirmModal" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h2 class="modal-title">Confirmation</h2>
            </div>
            <div class="modal-body">
                <h4 align="center" style="margin:0;">Are you sure you want to remove this data?</h4>
            </div>
            <div class="modal-footer">
             <button type="button" name="ok_button" id="ok_button" class="btn btn-danger">OK</button>
                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
            </div>
        </div>
    </div>
</div>


<script>
$(document).ready(function(){

 $('#user_table').DataTable({
  processing: true,
  serverSide: true,
  ajax:{
   url: "{{ route('cour.index') }}",
  },
  columns:[
   {
    data: 'file',
    name: 'file',
    render: function(data, type, full, meta){
     return "<img src={{ URL::to('/') }}/images/" + data + " width='70' class='img-thumbnail' />";
    },
    orderable: false
   },
   {
    data: 'prof',
    name: 'prof'
   },
   {
    data: 'module',
    name: 'module'
   },
   {
    data: 'chapitre',
    name: 'chapitre'
   },
   {
    data: 'titre',
    name: 'titre'
   },
   {
    data: 'description',
    name: 'description'
   },
   {
    data: 'action',
    name: 'action',
    orderable: false
   }
  ]
 });

 $('#create_record').click(function(){
  $('.modal-title').text("Ajouter un coure");
     $('#action_button').val("Add");
     $('#action').val("Add");
     $('#formModal').modal('show');
 });

 $('#sample_form').on('submit', function(event){
  event.preventDefault();
  if($('#action').val() == 'Add')
  {
   $.ajax({
    url:"{{ route('cour.store') }}",
    method:"POST",
    data: new FormData(this),
    contentType: false,
    cache:false,
    processData: false,
    dataType:"json",
    success:function(data)
    {
     var html = '';
     if(data.errors)
     {
      html = '<div class="alert alert-danger">';
      for(var count = 0; count < data.errors.length; count++)
      {
       html += '<p>' + data.errors[count] + '</p>';
      }
      html += '</div>';
     }
     if(data.success)
     {
      html = '<div class="alert alert-success">' + data.success + '</div>';
      $('#sample_form')[0].reset();
      $('#user_table').DataTable().ajax.reload();
     }
     $('#form_result').html(html);
    }
   })
  }

  if($('#action').val() == "Edit")
  {
   $.ajax({
    url:"{{ route('cour.update') }}",
    method:"POST",
    data:new FormData(this),
    contentType: false,
    cache: false,
    processData: false,
    dataType:"json",
    success:function(data)
    {
     var html = '';
     if(data.errors)
     {
      html = '<div class="alert alert-danger">';
      for(var count = 0; count < data.errors.length; count++)
      {
       html += '<p>' + data.errors[count] + '</p>';
      }
      html += '</div>';
     }
     if(data.success)
     {
      html = '<div class="alert alert-success">' + data.success + '</div>';
      $('#sample_form')[0].reset();
      $('#store_image').html('');
      $('#user_table').DataTable().ajax.reload();
     }
     $('#form_result').html(html);
    }
   });
  }
 });

 $(document).on('click', '.edit', function(){
  var id = $(this).attr('id');
  $('#form_result').html('');
  $.ajax({
   url:"/cour/"+id+"/edit",
   dataType:"json",
   success:function(html){
    $('#prof').val(html.data.prof);
    $('#module').val(html.data.module);
    $('#chapitre').val(html.data.chapitre);
    $('#titre').val(html.data.titre);
    $('#description').val(html.data.description);
    $('#store_file').html("<iframe src={{ URL::to('/') }}/images/" + html.data.file + " width='70' class='img-thumbnail' ></iframe>");
    $('#store_file').append("<input type='hidden' name='hidden_file' value='"+html.data.file+"' />");
    $('#hidden_id').val(html.data.id);
    $('.modal-title').text("Edit New Record");
    $('#action_button').val("Edit");
    $('#action').val("Edit");
    $('#formModal').modal('show');
   }
  })
 });

 var user_id;

 $(document).on('click', '.delete', function(){
  user_id = $(this).attr('id');
  $('#confirmModal').modal('show');
 });

 $('#ok_button').click(function(){
  $.ajax({
   url:"cour/destroy/"+user_id,
   beforeSend:function(){
    $('#ok_button').text('Deleting...');
   },
   success:function(data)
   {
    setTimeout(function(){
     $('#confirmModal').modal('hide');
     $('#user_table').DataTable().ajax.reload();
    }, 2000);
   }
  })
 });

});
</script>

routes:

Route::resource('cour', 'CourController');
Route::post('cour/update', 'CourController@update')->name('cour.update');
Route::get('cour/destroy/{id}', 'CourController@destroy');

When you got 500 error? If you get when your datatables send ajax, you can try to add CSRF to header request of datatable before send. Additional, you can change your.env APP_DEBUG=true to see more info about your error. A example when you want to send ajax from this

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

You can see how to add csrf to header datatable request here

    "ajax":{
        url: url,
        type: "GET",
        headers: { 'Apitoken': apiToken },
    });

You should set your csrf in meta tag in header

<meta name="csrf-token" content="{{ csrf_token() }}">

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM