2017-09-13 8 views
0

私はLaravel初心者です。私のコードを書いたりテストしたりしているうちに、私の破壊メソッドがもう正しく動作していないことに気付き、私が作った間違いを見つけることができません。だから私を助けてくれることを願っています。laravelは最後に追加されたものを削除します。

私の(ソフトウェア)ターゲットとは何ですか?私は "プロジェクト"を管理したい。すべてのプロジェクトには多くのレポートがあります。だから私は作成されたすべてのプロジェクトのページを手に入れました。そして、 "modify"と "delete"のボタンを持つテーブルにリストされたすべてのレポートを持つページを得ました。プロジェクトやレポートのすべてのCRUDを終えました。私が認識したときに、レポートやプロジェクトの削除ボタンにカーソルを合わせると、選択したレポートやプロジェクトの正しいIDが表示されます。私が削除ボタンを押すと、ダイアログが開き、 "はい"と "いいえ"ボタンで "本当に削除しますか?"というメッセージが表示されます。したがって、「はい」ボタンを押すと、Laravelは最後に追加されたデータベースエントリを削除します。

レポートとしてのプロジェクトも独自のコントローラを持っています。しかし、どちらも同じ_messages.phpを使用しています。私の間違いはそのファイルにあると私は思う。 _messages.phpから

抜粋:reportcontroller.phpから

@if(Session::has('sweet_alert.confirmDeleteReport')) 
<div class="alert alert-warning" role="alert"> 
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 

    <div class="row"> 
     <div class="col-xs-12"> 
      <strong>Achtung!</strong> {{Session::get('sweet_alert.confirmDeleteReport')}} 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-3 col-md-offset-8"> 
      <a class="btn btn-danger" href="{{ route('reports.destroy', $report->id) }}" title="Löschen" data-token="{{csrf_token()}}" data-method="delete">Löschen</a> 
      <a class="btn btn-default" data-dismiss="alert">Abbrechen</a> 
     </div> 
    </div> 
</div> 
@endif 

抜粋:

public function destroy(Report $report) 
{ 
    $report->delete(); 
    Session::flash('sweet_alert.success','Der Bericht vom ' . $report->date . ' mit der Berichtsnummer ' . $report->reportNumber . ' wurde erfolgreich gelöscht.'); 
    return redirect()->route('reports.index'); 
} 

public function delete(Report $report) { 
    Session::flash('sweet_alert.confirmDeleteReport', 'Soll der Bericht vom ' . $report->date . ' mit der Berichtsnummer ' . $report->reportNumber . ' wirklich gelöscht werden? Dieser Vorgang kann nicht rückgängig gemacht werden.'); 
    return redirect()->route('reports.index'); 
} 

は、セッション内の障害があるかもしれませんか? php artisan config:cacheを実行してキャッシュをフラッシュしましたが、運がありません。すべてのアイデアは大歓迎です。

挨拶

+0

あなたのルートを表示できますか?そして、なぜあなたが宣言した削除機能を持っていますか? –

答えて

0

私が正しく理解していれば、あなたがすべてのレポートを表示するページがあります。各レポートには削除ボタンがあり、そのボタンルートは上記に含まれているdelete()メソッドにマップされます。このメソッドはmsgをセッションにフラッシュし、レポートインデックスをリロードします。

レポートのインデックスには、すべて@foreach ($reports as $report)のようなレポートが再度表示されます。ページの下部に、あなたが示した抽出物があります。これはを使用します。このページでは、すべて$reportsをループした後、そのコレクションの最後のレポートになります。つまり、最後のレポートを削除するだけです。

いくつかのソリューションは、私が見ることができますがあります。

1)フラッシュあなたがdelete()方法であなたのメッセージと一緒に削除するレポートのID。私はsweet_alertに慣れていませんが、アレイをフラッシュすることができます id?ような何か:

Session::flash('sweet_alert.confirmDeleteReport', [ 
    'id' => $report->id, 
    'message' => 'Soll der Bericht ...' 
]); 

そしてもちろん使用のアラートでそのID:

​​

はたぶん構文が間違っているが、私は、配列を点滅することは可能であると仮定しています。

2)私が通常このようなことをする方法は、テーブルの削除ボタンをクリックしたときにアラート/モーダル/何に必要なデータを入力するかを使用するJavascriptです。例えば(メインテーブル/リストで)あなたの[削除]ボタンは、データ-id属性を持つことができます:

<a href="#" data-id="{{ $report->id }}" class="btn btn-danger delete">Delete</a> 

そして、いくつかのJavascript(擬似コード、実装はあなたが設定のものを持っているかによって異なります):

$('a.delete').on('click', function(e) { 

    // Prevent the default behaviour of clicking a link 
    e.preventDefault(); 

    // Find the id of the report clicked 
    var id = $(this).data('id'); 

    // Update the href of the alert button so it will delete *that* report 
    $('div.alert a.danger').attr('href', 'reports/' + id); 

    // ... code to display the alert/modal 
}); 

アラートやモーダルを取得するためにページをリロードしないようにします。これにより、delete()メソッドが廃止され、それ以上使用されなくなることに注意してください。

UPDATE

あなたが外部JSファイルにビュー/コントローラからいくつかの変数を渡す必要がある場合、あなたはこのような何かすることができますビューで

<script> 
    var url = "{{ route('reports.destroy', Session::get('sweet_alert.confirmDeleteReport.id')) }}"; 
</script> 

外部にあります。(上記のインラインスクリプトの後にロードする必要があります)

$('div.alert a.danger').attr('href', url); 
+0

おそらく、_messages.phpを呼び出す前に、彼はレポートテーブルからid列を抜き取ることができます。彼が$ reportsのような配列にそれらを置くと、それを圧縮してビューに渡すことができます。このようにしてforeach($ reportsを$ reportとして)を使うと、href属性の中で$ report-> idを呼び出すことができます。 –

+0

@JoanPlepiはい、それはもう一つの良いオプションです - 実際に彼はすでにそのメソッドに '$ report'を持っていますので、' return redirect() - > route( 'reports.index') - >( 'deleteID'、$ report-> id); 'が動作します。 –

+0

ねえ。手伝ってくれてどうもありがとう。 –

関連する問題