Решил попробовать создать динамически запись с помощью ajax , получилось , но с костылями как мне кажется. Дальше я хотел подтянуть валидацию для записи, но на этом моменте возникла ошибка
POST localhost:8000/create 500 (Internal Server Error). Кстати , до валидации мне уже казалось что мой код уже как-то странно работает, допустим в методе контроллера, в начале я написал
exit('works') , чтобы просто проверить выполняется ли запрос на мой url, раньше это работало - скрипт просто обрывался с этим сообщением, но теперь сообщение отобразился в консоле при методе .done() , по идее код должен был дойти до контроллера и скрипт должен был выполнится там- и как бы это показалось довольно странным , не злитесь если для вас это очевидно :) Плюс еще в .done() я добавляю в тэги данные, которые пришли в json , если я этого не пишу , то данные появляются только при обновлении страницы, с этим всё нормально или нет ?)
Немного погуглив, я нашел решения, в основном все писали про то , что нужно передавать токен в заголовках вот так:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Но это не помогло, пробовал смотреть мои логи
/var/log/apache2/error.log - ничего военного не нашел. Скорее всего я как-то не так использую ajax. Вот весь код
$(document).ready(function() {
$(".interaction").find("#create").on("click", function() {
$("#create-modal").modal();
});
$('#modal-save').on('click', function() {
var token = '{{ csrf_token() }}';
var url = '{{ route('create.post') }}';
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
method: 'POST',
url: url,
data: {header: $("#post-header").val(), body: $("#post-body").val(), _token: token},
}).done(function (msg) {
console.log(JSON.stringify(msg));
$("#posts").append("<h2>" + msg.title +"</h2>");
$("#posts").append("<p>" + msg.body + "</p>");
$("#create-modal").modal('hide');
}).fail(function( jqXHR ) {
if (jqXHR.status == 422)
{
console.log('It doestn't works');
}
});
});
});
Все это оборачивается в @section('content') и наследует мой master шаблон , где в header я подключаю скрипты для этого
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
Route::post('/create', ['uses' => 'PostController@createPost', 'as' => 'create.post']);
- Вот на этот урл я всё отправляю , а в методе createPost пишу следующее:
$post = new Post;
$validator = Validator::make($request->all(), [
'header' => 'required|unique:posts|min:5|max:100',
'body' => 'required|max:200'
]);
if ($validator->fails()) {
return response()->json(['errors' => $errors], 422);
}
$post->title = $request['header'];
$post->post_body = $request['body'];
$post->user_id = 1;
$post->save();
return response()->json([
'title' => $post->title,
'body' => $post->post_body,
]);
Кому этой инфы мало , если что вот ссылка на весь проект
https://www.dropbox.com/sh/zufx3bhusbjhni3/AADzrOF... .
Заранее спасибо!