У меня есть система CRUD, которая позволяет пользователям создавать, редактировать и удалять свои собственные социальные группы.Затем эти группы отображаются на общедоступной странице, и другие пользователи могут просматривать и присоединяться к социальным группам.
Система create_group
работает отлично, и группы отображаются на общедоступной странице.Информация хранится в таблице базы данных groups
.
. Я хочу, чтобы пользователи могли нажимать кнопку «Присоединиться к группе» и записывать group_title
в базу данных.
идея состоит в том, что они могут затем просматривать группы, к которым они присоединились позже, со своей панели инструментов.
Я не уверен на 100%, как поступить, поскольку я новичок в кодировании.Моим инстинктом было создать еще одну CRUD-систему под названием Join, но это возможно излишне?
Я предпринял следующие шаги:
Создана таблица базы данных с именем 'Joins'
Создана система CRUD, такая же, как CRUD «Создать группу». Полагаю, я просто не буду использовать функции редактирования или создания этого CRUD.
Я разместил эту кнопку на странице, доступной для общего доступа:
<form method="post" action="{{ route('join.store') }}">
<input type="submit" name="{{ $group->group_title }}" value="Join Group" class="btn btn-success" />
</form>
При нажатии кнопки происходит что-то очень странное, я перехожу на правильную страницу http://version2.test/join
, но страница пуста, и на ней отображается
Страница просрочена
ошибка.Однако, если я обновлю страницу или даже скопирую URL на новую страницу, она будет отображаться правильно!?
Кроме того, при просмотре http://version2.test/join
я не вижу отображения заголовка группы.
UPDATE # 1 - затем я добавил @csrf к кнопке следующим образом:
<form method="post" action="/test">
@csrf
<input type="hidden" name="group_title" value="{{ $group->group_title }}">
<input type="submit" value="Join Group" class="btn btn-success" />
</form>
Сначала я думал, что это исправило ошибку «Срок действия страницы истек», но позже понял,что это не так.Кнопка «Присоединиться к группе» по-прежнему указывает на http://version2.test/join
, но на странице отображается ошибка «Срок действия страницы истек».Однако, если я обновлю страницу или даже скопирую URL на новую страницу, она будет отображаться правильно.
JoinController.php
<?php
namespace App\Http\Controllers;
use App\Join;
use Illuminate\Http\Request;
// All join pages require login except 'show'
class JoinController extends Controller
{
public function __construct()
{
$this->middleware('auth', ['except' => 'show']);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$join = Join::all();
return view('join/index', compact('join'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('join.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',
]);
$join = new Join([
'group_title' => $request->get('group_title'),
// 'group_description' => $request->get('group_description'),
// 'group_date' => $request->get('group_date'),
// 'group_time' => $request->get('group_time'),
]);
$join->save();
return redirect('/join')->with('success', 'Group joined!!');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$join = Join::find($id);
return view('join.show', compact('join'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$join = Join::find($id);
return view('join.edit', compact('join'));
}
/**
* 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',
]);
$join = Join::find($id);
$join->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');
$join->save();
return redirect('/join')->with('success', 'Group joined!');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$join = Join::find($id);
$join->delete();
return redirect('/join')->with('success', 'Unjoined!');
}
}
Join.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Join extends Model
{
protected $fillable = [
'group_title',
// 'group_description',
// 'group_date',
// 'group_time',
];
}
join/index.blade.php
<tbody>
@foreach($join as $join)
<tr>
<td>
<a href="{{ route('group_join.show',$group->id)}}">{{$group->group_title}}</a>
</td>
<td>
<a href="{{ route('group_join.edit', $group->id)}}" class="btn btn-sm btn-warning">Edit</a>
</td>
<td>
<form action="{{ route('group_join.destroy', $group->id)}}" method="post">
@csrf
@method('DELETE')
<button class="btn btn-sm btn-danger" type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
routes/web.php
Route::resource('join', 'JoinController');