Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Подскажите, пожалуйста, почему не работает.
Есть код:
В JS:
var id = ...;
$.ajax({
url:'/post',
method: 'POST',
data: {
id: id,
_token: token
}
});
В routes:
Route::any('/post', 'Controller@getPagePost');
В Controller:
public function getPagePost() {
$id = Request::input('id');
$post = Post::find($id);
...
return view('post', ['post' => $post])
}
Проверила, что получение id в JS (первая строка) работает правильно, но до контроллера этот id почему-то не доходит
Что во вкладке нетворк?
Не в сети
Что во вкладке нетворк?
status 500 Internal server error
Fatal error: Call to a member function comments() on null
(это про строчку в контроллере:
$comments = Post::find($id)->comments()->get();
)
1. Что произошло
2. Что было сделано, чтобы это произошло
3. Что ожидалось увидеть
Кроме пп 2 ничего нет.
С другой стороны, глубоко надесь, что вы (Татьяна) сами себе ответили в посте о 500й ошибке.
Не в сети
BMTH пишет:Что во вкладке нетворк?
status 500 Internal server error
Fatal error: Call to a member function comments() on null
(это про строчку в контроллере:
$comments = Post::find($id)->comments()->get();
)
Вот и ваша ошибка:)
Не в сети
1. Что произошло
2. Что было сделано, чтобы это произошло
3. Что ожидалось увидеть
Кроме пп 2 ничего нет.
С другой стороны, глубоко надесь, что вы (Татьяна) сами себе ответили в посте о 500й ошибке.
Я хочу, чтобы при нажатии на заголовок поста, этот пост открывался.
Для этого берется id выбранного поста, отправляется ajax-ом на путь '/post'
контроллер должен взять этот id, найти по нему пост в БД и открыть страницу конкретно этого поста.
Все, что я поняла из этой ошибки, это что в контроллере $id=null, но в этом и был мой вопрос. Где-то он потерялся, или в ajax, или в route.
Могу предположить, что я как-то неправильно использую метод any, но я использую его впервые, поэтому если вы понимаете в чем ошибка, подскажите, пожалуйста, а не говорите, что я сама себе ответила. Ошибку я сразу увидела и прочитала, и если бы я поняла ее причину, не спрашивала бы.
Как правило 500 Internal server error вылезает, если нет токена, если я не ошибаюсь.
В <head> должна быть строка:
<meta name="csrf-token" content="{{ csrf_token() }}">
Перед
$.ajax({
должно быть:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Не в сети
Татьяна, откройте консоль, к примеру в хроме и вопрос у вас отпадёт, где id потерялось
Ну и сделайте для примера отдельный роутер.
Route::post('post/{post}', [
'uses' => 'Controller@postPagePost'
])->where('post', '[0-9]+');
в аяксе
$.ajax({
url:'/post/' + id,
method: 'POST',
......
И то, что stsepelin написал тоже добавьте
и в контролере
public function PostPagePost(Post $post) {
return view('post', ['post' => $post->first()]);
}
Контролер лучше так
public function PostPagePost(Post $post) {
return view('post', , compact('post'));
}
там как раз по id будет критерия
Страницы 1