У меня очень странная проблема в одном из моих проектов. У меня есть маршрут перенаправления в одном из моих контроллеров, который перенаправляет и открывает маршрут, но не работает.
Я знаю, что это звучит расплывчато, и я сделаю все возможное, чтобы объяснить. У меня есть представление с некоторыми href на нем, которые отправляют запрос на получение контроллера, этот контроллер вызывает обработчик, а обработчик вставляет некоторые записи, а затем контроллер перенаправляет обратно на исходный маршрут.
В тот момент, когда я нажимаю на него, запрос получения запускает записи, которые правильно вставлены, и я возвращаюсь на исходную страницу, но вот проблема, что исходная страница все еще находится в старом состоянии и не обновляется. Мне нужно обновить страницу вручную, чтобы изменения вступили в силу. Я могу щелкнуть то же самое время hunderf без каких-либо обновлений в представлении.
Чтобы сделать его еще хуже, одни и те же точные коды прекрасно работают в локальной среде разработки и на стадии разработки, что происходит только в производственной среде.
Мой взгляд:
@extends('layouts.master') @section('title', 'Trajecten') @section('content') <div class="container"> <div class="row"> <div class="col-md-12"> @if (Session::has('status')) <div class="alert alert-success"> <ul> <li>{{Session::get('status')}}</li> </ul> </div> @endif @if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach($errors->all() as $error) <li>{{$error}}</li> @endforeach </ul> </div> @endif </div> </div> <div class="row"> <div class="col-md-12"> <a href="#" data-toggle="modal" data-target="#contactModal"> <button type="submit" class="btn btn-primary btn-orange pull-right"> Meld nieuwe inkoop behoefte </button> </a> <table class="table table-hover table-striped"> <thead> <tr> <th>Product/dienst</th> <th>Geïnteresseerd</th> <th>Deelnemen t/m</th> <th>Informatie</th> <th>Deelnemen</th> </tr> </thead> @foreach($trajects as $traject) <tr> <td>{{$traject->name}}</td> <td>{{$traject->deelnemers->count() + $traject->participants}}</td> <td>{{date('dm-Y', strtotime($traject->tot))}}</td> <td>Klik <a href="#" data-toggle="modal" data-target="#trajectmodal{{$traject->id}}" onclick="log(10,2,{{$traject->id}})">hier</a> voor meer informatie</td> <td>@if(in_array($traject->id, $usertrajects)) U bent geregistreerd als geïnteresseerde @else Klik <a href="{{ route('traject.participate', ['id' => $traject->id])}}">hier</a> voor deelname @endif</td> </tr> @endforeach </table> </div> </div> @foreach($trajects as $traject) <div class="modal fade" id="trajectmodal{{$traject->id}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">Meer informatie voor {{$traject->name}}</h4> </div> <div class="modal-body"> <div class="row"> <div class="col-md-12"> {!!$traject->description!!} </div> </div> </div> <div class="modal-footer text-center"> @if($traject->conditie != "")<a target="__blank" href="{{$traject->conditie}}" onclick="log(11,2,{{$traject->id}})"><button type="button" class="btn btn-default pull-left btn-orange">Conditie</button></a>@endif @if($traject->product != "")<a target="__blank" href="{{$traject->product}}" onclick="log(12,2,{{$traject->id}})"><button type="button" class="btn btn-default btn-orange">Product</button></a>@endif @if($traject->leverancier != "")<a target="__blank" href="{{$traject->leverancier}}" onclick="log(13,2,{{$traject->id}})"><button type="button" class="btn btn-primary btn-orange">Leverancier</button></a>@endif </div> </div> </div> </div> @endforeach </div> <div class="modal fade" tabindex="-1" role="dialog" id="contactModal"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="gridSystemModalLabel">Meldpunt inkoop behoefte</h4> </div> <div class="modal-body"> <form class="form-horizontal" role="form" id="meldinkoopbehoefte" method="post"> {!! csrf_field() !!} <div class="form-group"> <label for="subject" class="col-sm-3 text-left control-label">Inkoop behoefte</label> <div class="col-sm-9"> <input type="text" class="form-control" id="subject" name="subject" placeholder="Onderwerp" value=""> </div> </div> <div class="form-group"> <label for="message" class="col-sm-3 text-left control-label">Bericht</label> <div class="col-sm-9"> <textarea class="form-control" rows="4" placeholder="Bericht" name="message"></textarea> </div> </div> </form> </div> <div class="modal-footer"> <button type="button" onclick="javascript:$('#meldinkoopbehoefte').submit()" class="btn btn-primary btn-orange">Verstuur</button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div><!-- /.modal --> @endsection
Мой метод в контроллере
Изменив маршрут на другую страницу, я вижу, что изменения вступают в силу, как вспышка сеанса. Поэтому я подозреваю свое мнение в этом вопросе.
public function participate($id){ if(TrajectHandler::participate($id)){ Session::flash('status', 'Uw interesse of voorstel is ontvangen'); } //Changing the route to another page i see the changes take effect. //So i am suspecting my view at this point. return redirect()->route('traject.index'); }
Метод индекса в контроллере
public function index(){ $trajects = TrajectHandler::getTrajects(); $userTrajects = TrajectHandler::getUserTrajects(); foreach ($trajects as $traject) { if (!is_null(ViewedUserTraject::where('user_id', Auth::id()) ->where('traject_id', $traject->id)->first())) continue; $viewedTraject = new ViewedUserTraject(); $viewedTraject->user_id = Auth::id(); $viewedTraject->traject_id = $traject->id; $viewedTraject->save(); } return view('traject.index', [ 'trajects' => $trajects, 'usertrajects' => $userTrajects ]); }
Другой метод в контролере
Я решил добавить этот метод в вопрос, поскольку это в основном то же самое, но работает.
public function suggestTraject(ContactRequest $request){ Mailer::inkoopBehoefteMail(Auth::user(), $request->subject, $request->message); Session::flash('status', 'Inkoop behoeften verstuurd.'); return redirect()->route('traject.index'); }
Метод участия в TrajectHandler
public static function participate($id){ $count = TrajectUser::where('user_id' , Auth::id())->where('traject_id', $id)->get(); if (count($count) == 0) { $traject = new TrajectUser; $traject->traject_id = $id; $traject->user_id = Auth::id(); if($traject->save()){ Logger::log(Auth::id(),5,2,$id); Mailer::newTrajectUser(Auth::user(), Traject::find($id)); return true; } return false; } return true; }
Мои маршруты
Route::group(['prefix' => 'traject'], function(){ Route::get('', ['as' => 'traject.index' , 'uses' => 'User\TrajectController@index']); Route::post('', ['as' => 'traject.index' , 'uses' => 'User\TrajectController@suggestTraject']); Route::get('participate/{id}', ['as' => 'traject.participate' , 'uses' => 'User\TrajectController@participate']); });
Похоже, что это как-то связано с кешированием.
Добавление следующих заголовков в файл маршрутов исправлено для меня.
header('Expires: Sun, 01 Jan 2014 00:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', FALSE); header('Pragma: no-cache');
Поддерживает ли версия php в рабочей среде минимальную требуемую версию php для Laravel? Для Laravel 5.2 вам нужен php 5.5.9. См. Документы Laravel