Я пытаюсь создать таблицу данных с пользовательской фильтрацией с помощью yajra datatable из здесь :
Таблица HTML в представлении:
<form id="search-form" class="form-inline" method="POST" role="form" action="#">
<select id="batch" name="batch">
<option value="">Select</option>
<option value="22">Skill Level CBE Dec 2018</option>
<option value="2">Batch 2</option>
</select>
<button class="btn btn-primary" type="submit">Search</button>
</form>
<table class="table table-striped table-bordered datatable" cellspacing="0" width="100%">
<thead>
<tr>
<th>{{ getPhrase('S/N')}}</th>
<th>{{ getPhrase('Batch')}}</th>
<th>{{ getPhrase('Course')}}</th>
<th>{{ getPhrase('Subject')}}</th>
<th>{{ getPhrase('title')}}</th>
<th>{{ getPhrase('otq_marks')}}</th>
<th>{{ getPhrase('cr_marks')}}</th>
<th>{{ getPhrase('total')}}</th>
<th>{{ getPhrase('average')}}</th>
</tr>
</thead>
</table>
@section('footer_scripts')
@include('common.datatables', array('route'=>URL_STUDENT_EXAM_GETATTEMPTS.$user->slug, 'route_as_url' => 'TRUE'))
@stop
Что касается common.datatables
, datatables.blade.php
имеет:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
tableObj = $('.datatable').DataTable({
processing: true,
serverSide: true,
retrieve :true,
// cache: true,
type: 'GET',
ajax: {
url: '{{ $routeValue }}',
data: function (d) {
d.batch = $('#batch').val();
}
}
});
$('#search-form').on('submit', function(e) {
tableObj.draw();
e.preventDefault();
});
значение URL-адреса ajax $ routeValue ссылается на URL_STUDENT_EXAM_GETATTEMPTS
константу (будет уточнено позже), используемую в любом виде.
Когда я выбираю значение в раскрывающемся списке "batch"
и нажимаю кнопку submit
, на маршрут выполняется вызов ajax. В инструменте проверки браузера я вижу, что в URL-адрес ajax добавляется множество параметров запроса, и наш параметр batch
также присутствует. Теперь мне нужно получить этот параметр batch
внутри контроллера.
Теперь о коде на стороне сервера:
Константа URL_STUDENT_EXAM_GETATTEMPTS
, используемая в блейде, имеет значение PREFIX.'exams/student/get-exam-attempts/'
А в route.php
маршрут определяется как:
Route::get('exams/student/get-exam-attempts/{user_slug}/{exam_slug?}', 'StudentQuizController@getExamAttemptsData');
В контроллере у меня есть:
public function getExamAttemptsData(Request $request,$slug, $exam_slug = '')
{
//body goes here
}
Я использовал все следующие методы для получения параметра batch
в контроллере, но напрасно:
$request->get('batch')
$request->query('batch')
Input::get('batch')
Как я могу получить значение batch
внутри контроллера?
РЕДАКТИРОВАТЬ: Кстати, я использую use Illuminate\Http\Request;
для переменной Request $request
в параметре функции контроллера
EDIT2: Инструмент проверки браузера отображает URL-адрес запроса ajax как:
http: // localhost / lcbs / exams / student / get-exam-попытки / myuser123? Draw = 2 & колонки% 5B0% 5D% 5Bdata% 5D = 0 ...... поиск% 5Bregex% 5D = false & партия = 22 * 1059 * & _ = 1541684388689.
Итак, вы видите, что batch
есть в параметрах запроса.
Но внутри контроллера код $request->getQueryString()
показывает только
%2Fexams%2Fstudent%2Fget-exam-attempts%2Fmyuser123
И \URL::current()
показывает http: // localhost / lcbs / exams / student / get-exam-попытки / myuser123
Это означает, что $request
пропускает полную строку запроса.
EDIT3: @ Adrian Hernandez-Lopez, я вставляю ПОЛНОЕ содержание Kernel.php здесь:
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,
'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,
'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,
// 'adminOrGuest' => \App\Http\Middleware\AdminOrGuestMiddleware::class,
];
}