51 lines
2.1 KiB
PHP
51 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\SiteSetting;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\View\View;
|
|
|
|
final class SeoSettingsController extends Controller
|
|
{
|
|
private const KEYS = [
|
|
'seo_site_name', 'seo_title_suffix', 'seo_default_title', 'seo_default_description',
|
|
'seo_default_keywords', 'seo_canonical_base_url', 'seo_default_og_image', 'seo_twitter_site',
|
|
'seo_organization_name', 'seo_organization_logo', 'seo_google_site_verification',
|
|
];
|
|
|
|
public function edit(): View
|
|
{
|
|
return view('admin.seo.edit', [
|
|
'settings' => collect(self::KEYS)->mapWithKeys(fn (string $key) => [$key => SiteSetting::valueFor($key, '')]),
|
|
'robotsEnabled' => SiteSetting::booleanFor('seo_robots_enabled', true),
|
|
]);
|
|
}
|
|
|
|
public function update(Request $request): RedirectResponse
|
|
{
|
|
$data = $request->validate([
|
|
'seo_site_name' => ['required', 'string', 'max:80'],
|
|
'seo_title_suffix' => ['nullable', 'string', 'max:80'],
|
|
'seo_default_title' => ['required', 'string', 'max:160'],
|
|
'seo_default_description' => ['required', 'string', 'max:320'],
|
|
'seo_default_keywords' => ['nullable', 'string', 'max:500'],
|
|
'seo_canonical_base_url' => ['nullable', 'url:http,https', 'max:2048'],
|
|
'seo_default_og_image' => ['nullable', 'url:http,https', 'max:2048'],
|
|
'seo_twitter_site' => ['nullable', 'string', 'max:40', 'regex:/^@?[A-Za-z0-9_]{1,15}$/'],
|
|
'seo_organization_name' => ['nullable', 'string', 'max:120'],
|
|
'seo_organization_logo' => ['nullable', 'url:http,https', 'max:2048'],
|
|
'seo_google_site_verification' => ['nullable', 'string', 'max:255'],
|
|
]);
|
|
|
|
foreach (self::KEYS as $key) {
|
|
SiteSetting::put($key, isset($data[$key]) ? trim((string) $data[$key]) : null);
|
|
}
|
|
SiteSetting::put('seo_robots_enabled', $request->boolean('seo_robots_enabled') ? '1' : '0');
|
|
|
|
return back()->with('status', 'SEO settings updated.');
|
|
}
|
|
}
|