добавить функцию удаления для результатов поиска ajax - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь создать динамическую таблицу с помощью 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">რედაქტირება</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

Подскажите, пожалуйста, как решить эту проблему?

1 Ответ

0 голосов
/ 24 октября 2019

Вместо генерации 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">რედაქტირება</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.

Надеюсь, это поможет !!

...