laravel 5.2 действительный запрос ajax

Как мы можем проверить в Laravel 5.2, является ли запрос действительным запросом ajax. В codeigniter мы могли бы проверить это как $this->input->is_ajax_request(). Есть ли что-то подобное в Laravel 5.2?

Кроме того, я хотел бы знать, как мы можем проверить запрос токена csrf. Это нормально, если я позволю рендерингу моей веб-страницы через промежуточное программное обеспечение «веб», генерирующее токен csrf, а затем передам этот токен в качестве параметра запроса ajax? Позаботится ли Laravel о проверке токена или есть альтернативный способ обойти это?

Я проверил документацию по laravel 5.2, и, поскольку я впервые имею дело с фреймворком laravel, кажется, что документация предполагает, что читатель уже знаком с более ранними версиями фреймворка. Для такого новичка, как я, это немного ошеломляет.

Заранее спасибо. Пожалуйста, дайте мне знать, если вам нужно больше информации от меня.

Пракхар


person Prakhar    schedule 03.01.2016    source источник


Ответы (4)


Я думаю, что это может помочь вам понять очень простой способ использования AJAX с Laravel.

Это действительно старый код, но он работает jajajaja.

Сторона контроллера:

/**
 * @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, где токен передается как скрытый ввод.

person Victor Hugo Avelar    schedule 03.02.2016

В 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;
person Abid Ali    schedule 21.07.2016

Как мы можем проверить в Laravel 5.2, является ли запрос действительным запросом ajax. В codeigniter мы могли бы проверить это как $this->input->is_ajax_request(). Есть ли что-то подобное в Laravel 5.2?

Класс Request имеет функцию ajax(), поэтому $request->ajax() или Request::ajax() ( в зависимости от того, как вы получаете запрос в своем контроллере) добьется цели.

Кроме того, я хотел бы знать, как мы можем проверить запрос токена csrf. Это нормально, если я позволю рендерингу моей веб-страницы через промежуточное программное обеспечение «веб», генерирующее токен csrf, а затем передам этот токен в качестве параметра запроса ajax? Позаботится ли Laravel о проверке токена или есть альтернативный способ обойти это?

Да, передайте токен с вызовом AJAX и убедитесь, что ваши маршруты имеют промежуточное ПО CSRF (попробуйте запрос без токена - он должен выдать ошибку). Примеры для этого есть в документации: https://laravel.com/docs/5.2/routing#csrf-x-csrf-token

person ceejayoz    schedule 03.01.2016
comment
Спасибо за вклад, приятель. Я просмотрел документацию и смог найти больше информации о функции $request-›ajax(). - person Prakhar; 05.01.2016
comment
@Prakhar Не все описано в документах, они предназначены для наиболее часто используемых частей. Иногда вам нужно заглянуть в документы API. - person ceejayoz; 05.01.2016

Каждый раз, когда вы определяете форму 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>
person Misterk    schedule 28.03.2017