%PDF- %PDF-
Direktori : /var/www/html/evablog/app/Http/Controllers/ |
Current File : /var/www/html/evablog/app/Http/Controllers/PostController.php |
<?php namespace App\Http\Controllers; use App\Models\Category; use App\Models\Post; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; use Spatie\Image\Image; use Spatie\MediaLibrary\Models\Media; class PostController extends Controller { /** * Show the application dashboard. * * @param Request $request * @return \Illuminate\Http\Response */ public function index(Request $request) { $posts = Post::query(); if ($request->title) { $posts = $posts->where('title', 'like', "%{$request->title}%"); } if ($cat = $request->category_id) { $posts = $posts->whereHas('categories', function ($query) use ($cat) { $query->where('category_id', $cat); }); } return view('posts', [ 'posts' => $posts->paginate(10), 'categories' => Category::all(), 'params' => $request->all() ]); } public function show($post) { /** @var Post $post */ $post = Post::query()->find($post); if (!$post) { $post = new Post(); } return view('post', [ 'post' => $post, 'id' => $post->id ?: 'new', ]); } /** * @param Request $request * @param $id * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function createOrUpdate(Request $request, $id) { /** @var Post $post */ $post = Post::query()->find($id); $rules = [ 'title' => 'required|string', 'description' => 'required|string', 'media' => 'required|image', ]; $this->validate($request, $rules); DB::beginTransaction(); try { if ($post) { $post->update($request->all()); $post->media()->get()->each(function ($media) { /** @var Media $media */ Storage::disk('posts')->delete($media->name); $media->delete(); }); } else { $post = Post::query()->create($request->all()); } $file = $request->file('media'); $tmp = Storage::disk('tmp')->put('posts', $file); $destination = public_path("tmp/$tmp"); Image::load($destination)->width(720)->save($destination); $post->addMedia($destination)->toMediaCollection(Post::MEDIA_LIBRARY, Post::MEDIA_LIBRARY); Storage::disk('tmp')->delete($destination); DB::commit(); if ($id === 'new') { return redirect(route('dashboard.posts.details', $post->fresh()->id)); } return redirect(route('dashboard.posts')); } catch (\Exception $exception) { DB::rollback(); return redirect(route('dashboard.posts.details', $post->id)); } } }