0

ajax/jqueryで動的テーブルを作ろうとしています。

検索結果が表示された後、各行に編集や削除など、各エントリを担当するアクションが必要です。これは私のコントローラーメソッドです

     public function search(Request $request){
    if($request->ajax()){
        $output="";
        // $users=DB::table('users')->where('user_id','LIKE','%'.$request->search."%")->get();   
        $grammar_cards = FlashCard::where('lang','=','gr')
                                ->where(function($query) use ($request){
                                    $query->where('word','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option1','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option2','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option3','LIKE', '%'.$request->search.'%')
                                    ->orWhere('option_correct','LIKE', '%'.$request->search.'%')
                                    ->orderBy('class')
                                    ->orderby('unit_id');
                                })->paginate(20);
        // $flashcards->setPath('custom/url');

                if($grammar_cards){
                    foreach ($grammar_cards as $key => $grammar_card) {
                        $grammarcard_question = $grammar_card->word;
                        $grammarcard_ch1 = $grammar_card->option1;
                        $grammarcard_ch2 = $grammar_card->option2;
                        $grammarcard_ch3 = $grammar_card->option3;
                        $grammarcard_correctchoice = $grammar_card->option_correct;
                        $grammarcard_unit = $grammar_card->unit_id;
                        $grammarcard_class = $grammar_card->class;

                        $output.='<tr>'.
                        '<td>'.$grammarcard_question.'</td>'.
                        '<td>'.$grammarcard_ch1.'</td>'.
                        '<td>'.$grammarcard_ch2.'</td>'.
                        '<td>'.$grammarcard_ch3.'</td>'.
                        '<td>'.$grammarcard_correctchoice.'</td>'.
                        '<td>'.$grammarcard_unit.'</td>'.
                        '<td>'.$grammarcard_class.'</td>'.
                        '<td style="display:flex;">
                            <a href="/admin/grammar/'.$grammar_card->id.'/edit" style="margin-right:10px;"><button class="btn btn-info">რედაქტირება&lt;/button></a>
                            <form action="{{ route(\'grammar.destroy\', '.$grammar_card->id.')}}" method="post">
                                @csrf
                                @method(\'DELETE\')
                                <button class="btn btn-danger" type="submit">delete</button>
                            </form></td>'.
                        '</tr>';
                    }
                    return Response($output);
                    // return view('admin.grammar.index', ['output' => $output])->render(); 
                }
            }
    }

これが私のルートです

        Route::resource('/admin/grammar', 'GrammarController');

これが私の破棄方法です

    public function destroy($id)
{
    $grammar_card = FlashCard::find($id);
    $grammar_card->delete();
    return redirect('admin/grammar')->with('success', 'successfully deleted');
}

これは私の出力です

@csrf @method('DELETE') をテキストと削除ボタンとして出力します

削除ボタンをクリックする と、url localhost:8000/admin/%7B%7B%20route('grammar.destroy',%2040271)%7D%7D に移動し、419 エラーが出力されます

この問題を解決する方法を教えてください。

4

1 に答える 1

0

コントローラーで HTML を生成する代わりに、「$grammar_cards」データを使用して生成するテーブルの新しいブレード ビューを作成する必要があります。

resources/view フォルダーに「grammar_cards.blade.php」ファイルを作成するとします。& Blade.php ファイルに以下のコードを追加

@if($grammar_cards)
    @foreach($grammar_cards as $key => $grammar_card)
        <tr>
            <td>{!! $grammar_card->word !!}</td>
            <td>{!! $grammar_card->option1 !!}</td>
            <td>{!! $grammar_card->option2 !!}</td>
            <td>{!! $grammar_card->option3 !!}</td>
            <td>{!! $grammar_card->option_correct !!}</td>
            <td>{!! $grammar_card->unit_id !!}</td>
            <td>{!! $grammar_card->class !!}</td>
            <td style="display:flex;">
                <a href="/admin/grammar/'.$grammar_card->id.'/edit" style="margin-right:10px;">
                    <button class="btn btn-info">რედაქტირება&lt;/button>
                </a>
                <form action="{{ route(\'grammar.destroy\', '.$grammar_card->id.')}}" method="post">
                    @csrf
                    @method('DELETE')
                    <button class="btn btn-danger" type="submit">delete</button>
                </form>
            </td>
        </tr>
    @endforeach
@endif

ビューに「$grammar_cards」変数を渡します。

$table_html = view('grammar_cards')->with(compact('grammar_cards'))->render();

表示したい場所に応じて $table_html を渡します。

問題は、「@csrf」や「@method」などのブレード固有の機能を使用していたことで、他の場所では使用できず、.blade.php ファイルのみが使用されていました。

この助けを願っています!!

于 2019-10-24T07:06:15.947 に答える