Изменить цвет и функцию кнопки после нажатия - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть зеленая кнопка присоединиться , которая позволяет пользователям присоединиться к группе. Затем пользователи могут видеть группы, к которым они присоединились, из своей зарегистрированной панели инструментов. Данные хранятся в таблице groups в базе данных.

Я хочу, чтобы кнопка стала красной после нажатия и прочитала Unjoin .

Я знаю, что каждая ссылкаимеет пять различных состояний: link, hover, active, focus и visited, и хотя visited будет нормальным вариантом, я должен убедиться, что вошедший в систему пользователь всегда будет видеть красный Отсоединить кнопку , даже если они очистят свой кэш или что-то в этом роде.

Нужно ли заставить кнопку связываться с базой данных, чтобы убедиться, что пользователь присоединился к группе, или это будет сделано с помощью javascriptили что-то еще?

РЕДАКТИРОВАТЬ

Спасибо @TanvirAhmed за приведенный ниже код. Это частично сработало, пользователи вышли из системы ЗЕЛЕНЫЙ и вошли в систему, см. КРАСНЫЙ. Но вошедшие в систему пользователи ВСЕГДА видят красный, тогда как они должны видеть КРАСНЫЙ, только если они ранее присоединились к группе.

@if(Auth::user() == '')

<form method="post" action="{{ route('groups.join') }}">
@csrf
<button class="btn btn-success" type="submit">Join Group</button>
<input type="hidden" name="group_id" value="{{ $group->id }}" />
</form>

@else

<form action="{{ route('groups.destroy', $group->id)}}" method="post">
@csrf
@method('DELETE')
<button class="btn btn-sm btn-danger" type="submit">Delete</button>
</form>

@endif

Я просто остался с проблемой перенаправления, когда нажата красная кнопка удаления,

Я не хочу перенаправлять пользователей после нажатия кнопки удаления, они должны оставаться на текущей странице {{ route('groups.show',$group->id)}}.

Однако мне нужно действие кнопки, чтобы удалить (destroy) пользователя из группы, поэтому я понимаю, что мне нужно {{ route('groups.destroy', $group->id)}}.

Как же тогда выполнить как маршрут уничтожения, так и оставить пользователей на текущей странице?

GroupController.php

<?php

namespace App\Http\Controllers;

use App\Group;
use Illuminate\Http\Request;

// All Groups pages require login except 'show'
class GroupsController extends Controller
{

    public function __construct()
    {
        $this->middleware('auth', ['except' => 'show']);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $groups = Group::where('created_by_user_id', auth()->id())->get();

        return view('groups/index', compact('groups'));
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function joined()
    {
        //@todo change query to show groups joined
        // $groups = Group::where('created_by_user_id', auth()->id())->get();
        // $groups = Group::with('joinedUsers')

        $groups = auth()->user()->groupsJoined()->get();

        return view('groups/joined', compact('groups'));
    }

    /**
     * Store the group that a user has joined in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function join(Request $request)
    {
        $request->validate([
            'group_id' => 'required',
        ]);

        $group = Group::find($request->get('group_id'));
        $group->joinedUsers()->attach(auth()->id());

        return redirect('groups/joined')->with('success', 'You joined the group!!');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('groups.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)

    {
        $request->validate([
            'group_title' => 'required',
            'group_description' => 'required',
            'group_date' => 'required',
            'group_time' => 'required',
        ]);

        $group = new Group([
            'group_title' => $request->get('group_title'),
            'group_description' => $request->get('group_description'),
            'group_date' => $request->get('group_date'),
            'group_time' => $request->get('group_time'),
        ]);
        $group->save();
        return redirect('/groups')->with('success', 'Group saved!!');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        // $group = Group::find($id);
        $group = Group::with('createdByUser')->where('id', $id)->first();
        return view('groups.show', compact('group'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $group = Group::find($id);
        return view('groups.edit', compact('group'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $request->validate([
            'group_title' => 'required',
            'group_description' => 'required',
            'group_date' => 'required',
            'group_time' => 'required',
        ]);

        $group = Group::find($id);
        $group->group_title =  $request->get('group_title');
        $group->group_description = $request->get('group_description');
        $group->group_date = $request->get('group_date');
        $group->group_time = $request->get('group_time');
        $group->save();
        return redirect('/groups')->with('success', 'Group updated!');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $group = Group::find($id);
        $group->delete();
        return redirect('/groups')->with('success', 'Group deleted!');
    }
}

1 Ответ

0 голосов
/ 29 сентября 2019

В своем блейде вы можете использовать вот так ..

@if(Auth::user()=='')
///your join/green button
@else
//your red /unjoin button
@endif

Попробуйте и дайте мне знать, что там происходит, чтобы остаться на странице шоу, замените код контроллера из приведенного ниже кода

public function destroy($id)
    {
        $group = Group::find($id);
        $group->delete();
        return back();
    }

, а также рекомендуется подтвердить перед удалением, как показано ниже, вы можете использовать

<form action="{{ route('groups.destroy', $group->id)}}" method="post">
@csrf
@method('DELETE')
<button class="btn btn-sm btn-danger" type="submit" onclick="return confirm('Are you sure you want to delete?')">Delete</button>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...