2016-07-19 13 views
0

Ich bin etwas verwirrt, weil ich nicht sicher bin, ob ich Modelle dafür brauche, da ich nichts in eine Datenbank posten werde. Ich habe eine einfache IndexseiteDelivering Inhalt basierend auf wählt

Route::get('/', '[email protected]'); 

Nichts besonderes hier. Aber auf dieser Indexseite habe ich vier Tafeln, die die folgende Form

<a href="#" data-toggle="modal" data-target="#reportOneModal"> 
    <div class="panel panel-primary"> 
     <div class="panel-heading"> 
      <h3 class="panel-title">Report One</h3> 
     </div> 
     <div class="panel-body"><img src="{{ URL::to('/') }}/images/image1.png"></div> 
    </div> 
</a> 

Wenn eine der Platten angeklickt wird, es eine modale mit einigen Auswahleingänge bringt. Dies dient zum Herausfiltern des Berichts, den ich anzeigen muss. Jedes Panel hat verschiedene Optionen für die Auswahleingänge.

Was ich im Wesentlichen tun muss, ist die ausgewählten Eingänge in meinen Controller zu posten, damit ich herausfinden kann, welches Bild angezeigt werden soll. Ein modal sieht wie folgt aus

<div class="modal fade" id="reportOneModal" role="dialog" aria-labelledby="reportOneModalLabel"> 
    <div class="modal-dialog" role="document"> 
     <div class="modal-content"> 
      <div class="modal-body"> 
       {!! Form::open(array('route' => array('report'))) !!} 
       <div class="modal-body"> 
        <div class="row"> 
         <div class="col-md-12"> 
          <div class="form-group"> 
           {!! Form::label('productType', 'Report Type', array('class' => 'col-sm-5 control-label blue')) !!} 
           <div class="col-sm-7"> 
            <select class="selectpicker" name="reportType" id="reportType"> 
             <option value=""></option> 
             <option value="Value">Value</option> 
             <option value="Value">Salary</option> 
            </select> 
           </div> 
          </div> 
         </div> 
        </div> 
        <div class="row" id="yearRow"> 
         <div class="col-md-12"> 
          <div class="form-group"> 
           {!! Form::label('reportYear', 'Year', array('class' => 'col-sm-5 control-label blue')) !!} 
           <div class="col-sm-7"> 
            <select class="selectpicker" name="reportYear" id="reportYear"> 
             <option value=""></option> 
             <option value="2016">2015</option> 
             <option value="2016">2016</option> 
            </select> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
       <div class="modal-footer"> 
        {!! Form::submit('View Report', ['class' => 'btn btn-primary loadBtn']) !!} 
       </div> 
       {!! Form::close() !!} 
      </div> 
     </div> 
    </div> 
</div> 

So können Sie sehen, dass das Formular für die modale zu berichten entsendet, ich werde für jede Platte eine andere Funktion aufrufen. Diese Route sieht wie folgt aus

Route::post('report', array('as' => 'report', 'uses' => '[email protected]')); 

Und die Controller-Funktion ist als

public function getReport() 
{ 
    $reportType = Input::get('reportType'); 
    $reportYear = Input::get('reportYear'); 

    $filePath = 'report-images/' . $reportType . '/' . $reportYear . '/'; 
    $image = $reportType . '_' . $reportYear; 
    $fullPath = $filePath . $image . '.png'; 

    if(!empty($fullPath)) { 
     return view('report.report', compact('fullPath')); 
    } 
} 
folgt

Das Problem Ich habe auf einen Bericht verweist ich anzuzeigen versuche. Ich kann das Bild gut darstellen, aber es gibt viele verschiedene Varianten zu diesem Bild. So auf dieser Berichte anzeigen I

<select class="selectpicker" name="bmId" id="bmId"> 
    <option value="variant1">variant1</option> 
    <option value="variant2">variant2</option> 
    <option value="variant3">variant3</option> 
</select> 

hinzugefügt Wenn eine dieser Varianten ausgewählt werden, muss ich irgendwie die Strecke report.getReport2 erinnern. Ich nehme an, ich könnte dies tun, mit Ajax, im Moment versuche ich,

$("#bmId").change(function() { 
    $.ajax({ url: "test.html", context: document.body, success: function(){ 
     $(this).addClass("done"); 
    }}); 
}); 

Das Problem ist, ich will nicht, eine URL nennen, möchte ich die Strecke nennen und es diese neue Variante Wert übergeben.

Wie würde ich etwas so machen?

Dank

Antwort

1

Ihre js Code ist selbst in der Ansicht es angenommen wird.

$.ajax({ 
     type: "POST", 
     url: "{{URL::to('/')}}/report", 
     data: {bmId:$("#bmId").val()}, 
     dataType: 'json', 
    success: function(data){ 
     //do something 
    }, 
    error: function(data){ 
     var errors = data.responseJSON; 
     console.log(errors); 
    } 
}); 

in Ihrem data: {bmId:$("#bmId").val()}, können Sie so viele Parameter übergeben, die Sie möchten, z.

data: {bmId:$("#bmId").val(), reportType:$("#reportType").val() }, 

und ich denke, Sie bekommen Report-Funktion aktualisieren:

public function getReport(Request $request)//dont worry about it, it will auto inject it 
{ 
    $reportType = Input::get('reportType'); 
    $reportYear = Input::get('reportYear'); 

    $filePath = 'report-images/' . $reportType . '/' . $reportYear . '/'; 
    $image = $reportType . '_' . $reportYear; 
    $fullPath = $filePath . $image . '.png'; 

    if($request->ajax())//if response is ajx 
     return response()->json(['status'=>'success']); 

    if(!empty($fullPath)) { 
     return view('report.report', compact('fullPath')); 
    } 
} 
+0

Wenn ich in dem Auswahländerungsereignis setzen, dass ich scheine dieses Fehler \t POST http zu bekommen: // localhost: 8000/report /% 7B% 7BURL :: bis ('/')% 7D% 7D/report \t 404 nicht gefunden –

+0

do 'var myurl =" {{URL :: to ('/')}} ";' außerhalb der Ajax - Anfrage, dann innerhalb der Ajax - Anfrage 'url: myurl +'/report ', ' – theMohammedA

Verwandte Themen