Files
ledstar_laravel/app/Http/Controllers/PlacesController.php
T
2026-05-19 17:26:27 +03:00

91 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\ORM\Place;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\View\View;
class PlacesController extends Controller
{
public function index(): View
{
$places = Place::paginate(10);
return view('places.index', compact('places'));
}
public function create()
{
return view('places.create');
}
public function store(Request $request): Redirector|RedirectResponse
{
// Очистка телефона (только цифры)
if ($request->has('phone')) {
$cleanPhone = preg_replace('/\D/', '', $request->phone);
$request->merge(['phone' => $cleanPhone]);
}
$data = $request->validate([
'name' => 'required|string|max:255',
'phone' => 'nullable|digits:11',
'address' => 'required|string|max:255',
'url' => 'required|string|max:255',
'gps' => [
'nullable',
'regex:/^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/'
],
'description' => 'nullable',
],[
'phone.digits' => 'Номер телефона должен содержать 11 цифр.',
'gps.regex' => "Неверный формат GPS координат"
]);
if ($request->has('gps')) {
$data['gps'] = $this->convertGPS($request->gps);
}
Place::create($data);
return redirect()
->route('places.index')
->with('status', 'Локация создана!');
}
private function convertGPS(string $gps): string
{
return str_replace([',',' '], ['|',''], $gps);
}
public function edit(Place $place): VIEW
{
return view('places.edit', compact('place'));
}
public function update(Request $request, Place $place): Redirector|RedirectResponse
{
$data = $request->validate([
'name' => 'required|string|max:255',
'lat' => 'required|numeric',
'lng' => 'required|numeric',
]);
$place->update($data);
return redirect()
->route('places.index')
->with('status', 'Обновлено!');
}
public function delete(int $id): Redirector|RedirectResponse
{
$place = Place::findOrFail($id);
$place->delete();
return redirect()
->route('places.index')
->with('status', 'Удалено!');
}
}