cms/app/Http/Controllers/Admin/PostController.php

107 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Traits\ModelAttributeTranslationsUpdattable;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
class PostController extends Controller
{
use ModelAttributeTranslationsUpdattable;
private function getModelClass($resource)
{
return config('postTypes.' . $resource)['model'];
}
private function getResource(Request $request)
{
return explode('.', str_replace(config('admin.route_name_prefix'), '', $request->route()->getName()))[0];
}
public function index(Request $request)
{
}
public function edit(Request $request, $postId)
{
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
$post = $modelClass::find($postId);
$languages = app('SiteState')->languageTranslations;
return view('admin.menu.posts.edit', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'resource' => $resource,
'post' => $post,
'languages' => $languages
]);
}
public function create(Request $request)
{
}
public function store(Request $request)
{
return $this->update($request, null);
}
public function update(Request $request, $postId)
{
$defaultLocale = config('app.locale');
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
/** @var \App\Post $post */
if($postId) {
$post = $modelClass::find($postId);
} else {
$post = app($modelClass);
$translatableAttributes = $post->getTranslatableAttributes();
$translatableAttributeValues = $request->all($translatableAttributes);
$translatableAttributeValues = collect($translatableAttributeValues)->map(function($translatableAttributeValue) use ($defaultLocale){
return $translatableAttributeValue[$defaultLocale];
});
$post = $modelClass::create(array_merge($translatableAttributeValues->toArray(), [
'user_id' => Auth::id()
]));
}
// Post的可翻譯屬性
$translatableAttributes = $post->getTranslatableAttributes();
// 更新所有可翻譯的屬性
foreach ($translatableAttributes as $translatableAttribute) {
$translations = $request->get($translatableAttribute);
if($translations) {
$this->updateAttributeTranslations($post, $translatableAttribute, $translations);
}
}
$post->fill([
'feature_image_id' => $request->get('feature_image_id')
]);
$post->save();
return redirect(route(config('admin.route_name_prefix') . $resource . '.edit', [$resource => $post->id]));
}
public function show(Request $request)
{
}
public function destroy(Request $request, $postId)
{
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
$post = $modelClass::find($postId);
$post->delete();
return back();
}
}