Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 27.06.2016 14:34:30

Татьяна

передача данных

Подскажите, пожалуйста, почему не работает.
Есть код:

В 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 почему-то не доходит

#2 27.06.2016 15:22:13

Re: передача данных

Что во вкладке нетворк?

Не в сети

#3 27.06.2016 15:37:51

Татьяна

Re: передача данных

BMTH пишет:

Что во вкладке нетворк?

status 500 Internal server error

Fatal error: Call to a member function comments() on null
(это про строчку в контроллере:
$comments = Post::find($id)->comments()->get();
)

#4 27.06.2016 18:30:51

Re: передача данных

1. Что произошло
2. Что было сделано, чтобы это произошло
3. Что ожидалось увидеть
Кроме пп 2 ничего нет.
С другой стороны, глубоко надесь, что вы (Татьяна) сами себе ответили в посте о 500й ошибке.

Не в сети

#5 27.06.2016 21:51:20

Re: передача данных

Татьяна пишет:
BMTH пишет:

Что во вкладке нетворк?

status 500 Internal server error

Fatal error: Call to a member function comments() on null
(это про строчку в контроллере:
$comments = Post::find($id)->comments()->get();
)

Вот и ваша ошибка:)

Не в сети

#6 28.06.2016 08:52:49

Татьяна

Re: передача данных

hzone пишет:

1. Что произошло
2. Что было сделано, чтобы это произошло
3. Что ожидалось увидеть
Кроме пп 2 ничего нет.
С другой стороны, глубоко надесь, что вы (Татьяна) сами себе ответили в посте о 500й ошибке.

Я хочу, чтобы при нажатии на заголовок поста, этот пост открывался.
Для этого берется id выбранного поста, отправляется ajax-ом на путь '/post'
контроллер должен взять этот id, найти по нему пост в БД и открыть страницу конкретно этого поста.

Все, что я поняла из этой ошибки, это что в контроллере $id=null, но в этом и был мой вопрос. Где-то он потерялся, или в ajax, или в route.
Могу предположить, что я как-то неправильно использую метод any, но я использую его впервые, поэтому если вы понимаете в чем ошибка, подскажите, пожалуйста, а не говорите, что я сама себе ответила. Ошибку я сразу увидела и прочитала, и если бы я поняла ее причину, не спрашивала бы.

#7 28.06.2016 14:02:06

stsepelin
Откуда: Estonia
Сообщений: 43

Re: передача данных

Как правило 500 Internal server error вылезает, если нет токена, если я не ошибаюсь.

В <head> должна быть строка:
<meta name="csrf-token" content="{{ csrf_token() }}">

Перед
$.ajax({

должно быть:
$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

Не в сети

#8 28.06.2016 14:39:30

гость15

Re: передача данных

Татьяна, откройте консоль, к примеру в хроме и вопрос у вас отпадёт, где 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()]);
    }

#9 28.06.2016 14:42:46

гость15

Re: передача данных

Контролер лучше так

public function PostPagePost(Post $post) {

        return view('post', , compact('post'));
    }

там как раз по id будет критерия

Подвал раздела