2015-01-25 4 views
0

Я хотел бы выполнить какой-то код после возврата View :: make ('view'); Возможно ли это в laravel? Я знаю, что могу положить мой код в мой взгляд, но его вид плохой практики, вот мой код:laravel выполнить код после возврата

if (!$conversation == null) { 
 
\t \t \t // here I update last_viewed time 
 
\t \t  $conversation_memb=$conversation->members()->where('user_id',Auth::user()->id)->first(); 
 
\t \t  $conversation_memb->last_viewed = time(); 
 
\t \t  $conversation_memb->save(); 
 
\t \t  
 
      // here I return View with some data 
 
\t \t \t return View::make('messages.conversation')->with('conversation',$conversation)->with('messages',$conversation->messages()->orderBy('created_at','DESC')->take(10)->get()->reverse()); 
 
\t \t \t 
 
\t \t }

Так что я хотел бы обновить время last_view только после того, как я загружаю так что сообщения будут отображаться как «Непрочитанные»

+0

Как только вы вернетесь из функции, эта функция будет выполнена. Обратите внимание, что любой PHP-код, будь то в контроллере или в представлении, будет выполнен до отправки ответа клиенту. Если вам нужно это сделать в браузере, вам нужно будет использовать Javascript. Вероятно, вы можете использовать запрос ajax для обновления времени. –

ответ

0

Вы думаете о проблеме неправильным образом. Вам не нужно обновлять данные после отображения представления; вместо этого просто дайте представление узнать о том, что происходит.

Предположительно прямо сейчас представление знает, является ли сообщение непрочитанным или нет, сравнивая некоторую метку времени с значением last_viewed, которое оно получает, достигнув непосредственно в $conversation. Не делай этого. Сохраните предыдущее значение last_viewed, прежде чем обновлять базу данных в переменной, передать эту переменную в представление и сравнить с ней представление.

Смежные вопросы