Как мы можем проверить в Laravel 5.2, если запрос является действительным ajax-запросом. В codeigniter мы могли бы проверить это как $ this-> input-> is_ajax_request (). Есть ли у Laravel 5.2 что-то подобное?
Кроме того, я хотел бы знать, как мы можем проверить запрос на токен csrf. Является ли это прекрасным, если я позволяю своей веб-странице визуализировать через посредство «web», создавая токен csrf, а затем передает этот токен в качестве параметра запроса ajax? Будет ли Laravel позаботиться о проверке токена или есть альтернативный путь вокруг этого?
Я проверил документацию laravel 5.2, и поскольку это первый раз, когда я имею дело с laravel framework, похоже, что документация предполагает, что читатель уже знаком с более ранними версиями структуры. Для новичка, подобного мне, это немного подавляющее.
Заранее спасибо. Пожалуйста, дайте мне знать, если вам понадобятся дополнительные материалы.
Prakhar
Я думаю, что это может помочь вам раскрыть самый простой способ использования AJAX с Laravel.
Это действительно старый кусок кода, но он работает джаяджая
Сторона контроллера:
/** * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getRamos(Request $request) { $check = Ramo::find($request->input('ramo')); $subramos = Subramo::where('ramo_id', $check->id)->get(['nombre_subramo']); if($request->ajax()){ return response()->json([ 'subramos' => $subramos ]); } }
Спереди:
<script> $(document).ready(function(){ $('#ramo').change(function(){ var ramo, token, url, data; token = $('input[name=_token]').val(); ramo = $('#ramo').val(); url = '{{route('getRamos')}}'; data = {ramo: ramo}; $('#subramos').empty(); $.ajax({ url: url, headers: {'X-CSRF-TOKEN': token}, data: data, type: 'POST', datatype: 'JSON', success: function (resp) { $.each(resp.subramos, function (key, value) { $('#subramos').append('<option>'+ value.nombre_subramo +'</option>'); }); } }); }); }); </script>
Принимая во внимание «#ramo» в качестве выбранного ввода и используя пакет style / html, где токен передается как скрытый ввод.
В Laravel 5.2 (надеюсь, что любой орган получит помощь от этого кода для Ajax)
Получите запрос ajax в функции, два примера функции:
Первый пример
public function getLev() { if (!Request::ajax()) return false; $result = Input::all(); $lev_id = (int) $result['lev_id']; $invoiceid = (int) $result['invoiceid']; return SuppliersController::getLev($invoiceid,$lev_id);//you can do any thing with your variables //function is working in my case, you case take idea from this function }
Второй пример
public function deleteInvoice() { if (Request::ajax()) { $data = Input::all(); return delete_invoice($data['invoice_id'], $data['reason_text']);//you can do any thing with your variables } return false; //function is working in my case, you case take idea from this function }
Включите эти файлы поверх страницы / контроллера, где вы пишете выше связанные функции ajax:
use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Request;
Как мы можем проверить в Laravel 5.2, если запрос является действительным ajax-запросом. В codeigniter мы могли бы проверить это как $ this-> input-> is_ajax_request (). Есть ли у Laravel 5.2 что-то подобное?
Класс Request имеет функцию ajax()
, поэтому $request->ajax()
или Request::ajax()
(в зависимости от того, как вы получаете запрос в своем контроллере) будет делать трюк.
Кроме того, я хотел бы знать, как мы можем проверить запрос на токен csrf. Является ли это прекрасным, если я позволяю своей веб-странице визуализировать через посредство «web», создавая токен csrf, а затем передает этот токен в качестве параметра запроса ajax? Будет ли Laravel позаботиться о проверке токена или есть альтернативный путь вокруг этого?
Да, передайте токен с вызовом AJAX и убедитесь, что ваши маршруты имеют промежуточное ПО CSRF (попробуйте запрос без токена – он должен выдать ошибку). Примеры приведены в документах для этого: https://laravel.com/docs/5.2/routing#csrf-x-csrf-token
Каждый раз, когда вы определяете HTML-форму в своем приложении, вы должны указать скрытое поле токена CSRF в форме, чтобы промежуточное ПО защиты CSRF смогло проверить запрос.
Чтобы создать скрытое поле ввода _token, содержащее токен CSRF, вы можете использовать вспомогательную функцию csrf_field:
Таким образом, чтобы использовать запрос AJAX с методом POST, вам необходимо передать скрытое поле токена CSRF вместе с данными ajax:
<script> var token="<?php echo csrf_token(); ?>"; $.ajax({ url:url, method:'POST', data:{ '_token':token, 'id':1 } }) </script>