laravel backpack - как добавить кастомный код html
Как добавить кастомный html код на страницу админки laravel backpack, с помощью шаблона blade и как передать в шаблон параметры. И настроить ajax запросы.
Подключаем виджет
use Backpack\CRUD\app\Library\Widget;
Добавляем виджет
Widget::add([
'type' => 'view',
'view' => 'admin.forms.chats.chat',
'value_1' => 'some value',
'value_2' => 'sdfsdf'
])->to('after_content');
Создаем blade шаблон
<h1>Hellow</h1>
@php
$value_1 = $__data['widget']['value_1'];
$value_2 = $__data['widget']['value_2'];
@endphp
<p>{{ $value_1 }}</p>
<p>{{ $value_2 }}</p>
Примечание:
В документации не нашел, как передавать параметры в виджет "view". Нашёл способ благодаря этому коду (в шаблоне blade):
@php
info($__data['widget']);
$value_1 = "sdfsdf";
$sdf = get_defined_vars();
dd($sdf);
@endphp
Далее можно настроить общение с сервером через ajax запросы.
Создаем контроллер
<?php
namespace App\Http\Controllers\Admin\Ajax;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ChatAjaxController extends Controller
{
public function getData($id, Request $request) {
$user = backpack_user();
return response()->json(['user'=>json_encode($user)]);
}
}
Создаем web роут
use App\Http\Controllers\Admin\Ajax\ChatAjaxController;
Route::controller(ChatAjaxController::class)
->prefix("admin-ajax")
->middleware("web")
->middleware('admin')
->group(
function(){
Route::post('chat/{id}/get-data','getData');
});
Примечание: роут должен быть web, а не api, иначе нельзя будет установить пользователя стандартными middleware web и admin.
Передаем в шаблон blade url и размещаем на странице js файл
Widget::add()->type('script')->content('admin_assets/js/forms/customer.js');
$current_entry_id = $this->crud->getCurrentEntry()->id;
Widget::add([
'type' => 'view',
'view' => 'admin.forms.chats.chat',
'baseUrl' => env("APP_AJAX_URL")."/admin-ajax/chat/$current_entry_id/",
])->to('after_content');
В blade шаблоне устанавливаем url для ajax запросов и устанавливаем csrf токен, для пост запросов.
<h1 class="mt-4">Hellow</h1>
@php
$csrf = csrf_token();
@endphp
<div></div>
<script>
window.csrf = '{{$csrf}}'
window.formActionUrl = '{{ $__data['widget']['baseUrl'] }}';
</script>
В js файле выполняем ajax запрос
document.addEventListener("DOMContentLoaded", (event) => {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': window.csrf
}
});
getData();
});
function getData() {
$.ajax({
url: window.formActionUrl+"get-data",
method: 'post', /* Метод запроса (post или get) */
// dataType: , /* Тип данных в ответе (xml, json, script, html). */
data: {text: 'Текст'}, /* Данные передаваемые в массиве */
success: function(data){ /* функция которая будет выполнена после успешного запроса. */
console.log("success");
console.log(data); /* В переменной data содержится ответ от index.php. */
},
error: function(error, exception) {
console.log("error");
console.log(error);
console.log("exception");
console.log(exception);
}
});
}
