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”数据生成的表创建一个新的刀片视图。

因此,假设您在资源/视图文件夹中创建了“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 回答