2017-01-19 3 views
0

Einfache Publish/Unplublish-Schaltflächen in der Blade-Ansicht sollten die Datenbanktabellenspalte beim Senden mit 0/1 aktualisieren.Zwei Funktionen in einem

Es gibt zwei Schaltflächen:

{!! Form::open(array('route' => array('book.publish', $book->id), 'method' => 'post')) !!} 
    <button class='btn btn-default'>Publish</button> 
{!! Form::close() !!} 

{!! Form::open(array('route' => array('book.publish', $book->id), 'method' => 'post')) !!} 
    <button class='btn btn-danger'>Unpublish</button> 
{!! Form::close() !!} 

Und zwei Routen

Route::post('book/publish/{publish}', '[email protected]')->name('book.publish'); 
Route::post('book/unpublish/{unpublish}', '[email protected]')->name('book.publish'); 

Und der Controller

public function publish($id){ 

    $publish = Books::find($id); 

    $publish->published = 1; 
    $publish->save();   

    return redirect()->route('book'); 

} 

public function unpublish($id){ 

    $publish = Books::find($id); 

    $publish->published = 0; 
    $publish->save();   

    return redirect()->route('book'); 
} 

Kann mir jemand helfen, dies in eine Funktion zu schreiben. Das Ziel ist, nur einen Knopf zu zeigen, abhängig davon, welchen Status das Buch hat. Wenn in der Datenbank veröffentlicht wird, sollte die Schaltfläche unveröffentlicht und entgegengesetzt angezeigt werden.

Antwort

3

-Controller

public function togglePublish($id) 
{ 
    $publish = Books::find($id); 

    if ($publish->published === 1) { 
     $publish->published = 0; 
    } else { 
     $publish->published = 1; 
    } 

    $publish->save(); 
    return redirect()->route('book'); 
} 

Ansicht

@if($book->published === 1) 
    // Show button to unpublish 
@else 
    // Show button to publish 
@endif 

Strecke

Route::post('book/publish/{publish}', '[email protected]')->name('book.publish'); 

Hinweis

In der Steuerung und Aussicht:

if ($publish->published === 1) 

wertet genau das gleiche wie

if ($publish->published) 

Aber ich denke, es klarer ist es ausdrücklich zu schreiben.

+0

Arbeit ist perfekt! Vielen Dank. – VLS

+0

Kein Problem! Vergiss nicht, als Antwort zu kreuzen, damit andere Leute davon profitieren können :) – Loek

+0

Ich glaube, meine Antwort ist besser. Bitte überprüfen Sie – Paras

1

Controller:

public function publish($id, $status){ 
    $publish = Books::find($id); 

    $publish->published = $status; 
    $publish->save();   

    return redirect()->route('book'); 
} 

Routen:

Route::post('book/publish/{publish}/{status}', '[email protected]')->name('book.publish'); 

Vorlage:

{!! Form::open(array('route' => array('book.publish', $book->id, 1), 'method' => 'post')) !!} 
    <button class='btn btn-default'>Publish</button> 
{!! Form::close() !!} 

{!! Form::open(array('route' => array('book.publish', $book->id, 0), 'method' => 'post')) !!} 
    <button class='btn btn-danger'>Unpublish</button> 
{!! Form::close() !!} 
+0

Vielen Dank für die Antwort. – VLS

1

Wenn Sie nur wollen, Status ändern, könnten Sie ternären Operator verwenden:

$publish->published = $publish->published == 1 ? 0 : 1; 

Oder Sie könnten versuchen Sie dies:

$publish->published = !$publish->published; 
+1

Danke für die Antwort. Ich mag das, aber ich bin nicht so weit fortgeschritten und ich habe Fehler gemacht und ternary noch nicht gut verstanden. @ Loek Antwort ist ein bisschen klar für mich jetzt. – VLS

1

einfach Ihre Ansicht ändern:

@if($book->published === 1) 
{!! Form::open(array('route' => array('book.publish', $book->id), 'method' => 'post')) !!} 
<button class='btn btn-default'>Publish</button> 

@else 
{!! Form::open(array('route' => array('book.unpublish', $book->id), 'method' => 'post')) !!} 
<button class='btn btn-danger'>Unpublish</button> 
@endif 
{!! Form::close() !!} 

Und Routen:

Route::post('book/publish/{publish}', '[email protected]')->name('book.publish'); 
Route::post('book/unpublish/{unpublish}', '[email protected]')->name('book.unpublish'); 

Und der Controller:

public function publish($id){ 

    Books::where('id', $id)->update(['published' => 1]);  
    return redirect()->route('book'); 

} 

public function unpublish($id){ 

    Books::where('id', $id)->update(['published' => 0]);  
    return redirect()->route('book'); 
} 

Warum diese Antwort ist besser als die andere geschrieben?

  1. bessere Abfrageleistung: Diese Antwort ruft nur 1 Abfrage in Controller gebrannt, während andere Antworten mindestens 2 Abfragen aufrufen (man das Buch zu finden, zu retten)
  2. bessere User Experience: I empfehle gegen die togglePublish-Methode im Controller. Der Grund ist, dass wenn zwei verschiedene Benutzer das Buch zur gleichen Zeit veröffentlichen oder nicht veröffentlichen, während beide glauben, dass die gewünschte Aktion ausgeführt wird, aber was wirklich passieren würde, wäre es getan und dann rückgängig gemacht!
Verwandte Themen