File: /home/marketing.cfbon.ru/public_html/app/Http/Controllers/Profile/SocialNetworkController.php
<?php
namespace App\Http\Controllers\Profile;
use App\Http\Controllers\Controller;
use App\Http\Requests\Profile\SocialNetworkRequest;
use App\Models\ProfileInfo;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class SocialNetworkController extends Controller
{
    public function create() : View
    {
        return view('profile.social-networks.create');
    }
    public function store(SocialNetworkRequest $request) : RedirectResponse
    {
        $optionData = ProfileInfo::getOption('social_networks');
        $requestData = $request->validated();
        $socialNetworks = $optionData ? json_decode($optionData->value, true) : [];
        $socialNetworks[$this->getNewId($socialNetworks)] =
            [
                'id' => $this->getNewId($socialNetworks),
                'label' => $requestData['label'],
                'link' => $requestData['link'],
            ];
        if ($optionData) {
            $optionData->update(['value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE)]);
        } else {
            ProfileInfo::create([
                'title' => 'social_networks',
                'value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE),
            ]);
        }
        return redirect()->route('profile.index')->with('success', 'Запись добавлена');
    }
    public function edit(string $id)
    {
        $optionData = json_decode(ProfileInfo::getOption('social_networks')->value, true);
        return view('profile.social-networks.edit', ['network' => (object)$optionData[$id]]);
    }
    public function update(SocialNetworkRequest $request, string $id)
    {
        $requestData = $request->validated();
        $optionData = ProfileInfo::getOption('social_networks');
        $socialNetworks = json_decode($optionData->value, true);
        $socialNetworks[$id] =
            [
                'id' => $id,
                'label' => $requestData['label'],
                'link' => $requestData['link'],
            ];
        $optionData->update(['value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE)]);
        return redirect()->back()->with('success', 'Запись изменена');
    }
    public function destroy(string $id)
    {
        $optionData = ProfileInfo::getOption('social_networks');
        $socialNetworks = json_decode($optionData?->value, true) ?? [];
        if ($socialNetworks[$id]) unset($socialNetworks[$id]);
        $optionData->update(['value' => json_encode($socialNetworks, JSON_UNESCAPED_UNICODE)]);
        return redirect()->route('profile.index')->with('success', 'Запись удалена');
    }
    private function getNewId(array $data) : int
    {
        return count($data) > 0 ? max(array_column($data, 'id')) + 1 : 1;
    }
}