- Член од
- 1 февруари 2007
- Мислења
- 408
- Поени од реакции
- 15
Ми треба совет како е најтобро да се рефакторира конторлеров посо нели вака не го личи ич дали е е подобро функцијата за аплоадиранје слики да иде у модел и дали уопсте тра и може да биде у модел како метода или да ја нправам класа со подоба практи со е попаметно посо вака ми е многу голем контролеров фала однапред и без недоветни коментари прасам за совет кој како би го ресил со е најдобро
Код:
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\ProductStoreRequest;
use App\Http\Requests\ProductUpdateRequest;
use App\Models\Accommodation as Accommodation;
use App\Models\Category as Category;
use App\Models\Cities as Cities;
use App\Models\Country as Country;
use App\Models\Product as Product;
use App\Models\States as States;
use App\Models\Tag as Tag;
use App\Models\User as User;
use App\Models\Workflow as Workflow;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Intervention\Image\ImageManagerStatic as Image;
use Spatie\ResponseCache\Facades\ResponseCache;
class ProductsController extends Controller
{
function __construct()
{
$this->middleware('auth');
$this->middleware('permission:product-list');
$this->middleware('permission:product-create', ['only' => ['create', 'store']]);
$this->middleware('permission:product-edit', ['only' => ['edit', 'update']]);
$this->middleware('permission:product-delete', ['only' => ['destroy']]);
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
if (Auth::user()->id == 1) {
$products = Product::orderBy('id', 'desc')->paginate(10);
} else {
$products = Product::orderBy('id', 'desc')->where('user_id', '=', Auth::user()->id)->paginate(10);
}
$categories = Category::all();
$country = Country::all();
$states = States::all();
$cities = Cities::all();
$tags = Tag::all();
$data = ['products' => $products, 'tags' => $tags, 'categories' => $categories, 'country' => $country, 'states' => $states, 'cities' => $cities];
return view('admin.product.index')->with($data);
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
$categories = Category::get();
$accommodations = Accommodation::get();
$tags = Tag::all();
$country = Country::all();
$states = States::all();
$cities = Cities::all();
$users = User::get();
$workflows = Workflow::orderBy('id', 'desc')->get();
$data = ['categories' => $categories, 'users' => $users, 'workflows' => $workflows, 'tags' => $tags, 'accommodations' => $accommodations, 'country' => $country, 'states' => $states, 'cities' => $cities];
return view('admin.product.create')->with($data);
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return Response
*/
public function store(ProductStoreRequest $request)
{
$request['title'] = strip_tags($request['title']);
$request['slug'] = str_slug($request['title']);
$slug = Product::where('title', $request['title'])->get();
(int)$count = count($slug);
if ($count > 0) $request['slug'] = $request['slug'] . '-' . $count;
$input = $request->all();
if ($request->hasFile('image')) {
$image = $request->file('image');
$path = public_path() . '/assets/img/products';
$pathThumb = public_path() . '/assets/img/products/thumbnails/';
$pathMedium = public_path() . '/assets/img/products/medium/';
$ext = $image->getClientOriginalExtension();
if ($count > 0) {
$imageName = str_slug($input['title']) . '-' . $count . '.' . $ext;
} else {
$imageName = str_slug($input['title']) . '.' . $ext;
}
$image->move($path, $imageName);
$findimage = public_path() . '/assets/img/products/' . $imageName;
$imagethumb = Image::make($findimage)->resize(360, 230);
$imagemedium = Image::make($findimage)->resize(600, null, function ($constraint) {
$constraint->aspectRatio();
});
$imagethumb->save($pathThumb . $imageName);
$imagemedium->save($pathMedium . $imageName);
$image = $request->imagethumb = $imageName;
$imagethumb = $request->image = $imageName;
$imagemedium = $request->image = $imageName;
}
$input['image'] = $image;
$input['imagemedium'] = $imagemedium;
$input['imagethumb'] = $imagethumb;
$product = Product::create($input);
$product->tags()->sync($request->tags, false);
$product->categories()->sync($request->categories, false);
Session::flash('flash_message', 'Product successfully created!');
ResponseCache::clear();
return redirect()->back();
}
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
$product = Product::FindOrFail($id);
$accommodations = Accommodation::get();
$users = User::get();
$categories = Category::all();
$tags = Tag::all();
$country = Country::all();
$states = States::all();
$cities = Cities::all();
$workflows = Workflow::orderBy('id', 'desc')->get();
$data = ['product' => $product, 'categories' => $categories, 'users' => $users, 'workflows' => $workflows, 'tags' => $tags, 'accommodations' => $accommodations, 'country' => $country, 'states' => $states, 'cities' => $cities];
return view('admin.product.edit')->with($data);
}
/**
* Update the specified resource in storage.
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(ProductUpdateRequest $request, $id)
{
$request['title'] = strip_tags($request['title']);
$slug = DB::table('product')->select('slug')->where('id', '=', $id)->get();
$slugname = $slug[0]->slug;
$input = $request->all();
// dd($request);
$product = Product::FindOrFail($id);
$product->fill($input)->save();
if ($request->hasFile('image')) {
$image = $request->file('image');
$path = public_path() . '/assets/img/products';
$pathThumb = public_path() . '/assets/img/products/thumbnails/';
$pathMedium = public_path() . '/assets/img/products/medium/';
$ext = $image->getClientOriginalExtension();
$imageName = $slugname . '.' . $ext;
$image->move($path, $imageName);
$findimage = public_path() . '/assets/img/products/' . $imageName;
$imagethumb = Image::make($findimage)->resize(200, null, function ($constraint) {
$constraint->aspectRatio();
});
$imagemedium = Image::make($findimage)->resize(400, 400, function ($constraint) {
$constraint->aspectRatio();
});
$imagethumb->save($pathThumb . $imageName);
$imagemedium->save($pathMedium . $imageName);
$image = $request->imagethumb = $imageName;
$imagethumb = $request->image = $imageName;
$imagemedium = $request->image = $imageName;
$input['image'] = $image;
$input['imagemedium'] = $imagemedium;
$input['imagethumb'] = $imagethumb;
}
$product->fill($input)->save();
$product->tags()->sync($request->tags, true);
$product->categories()->sync($request->categories, true);
Session::flash('flash_message', 'Product successfully edited!');
ResponseCache::clear();
return redirect()->back();
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
$product = Product::FindOrFail($id);
// Delete blog images
$image = public_path() . '/assets/img/products/' . $product->image;
$imagemedium = public_path() . '/assets/img/products/medium/' . $product->image;
$imagethumb = public_path() . '/assets/img/products/thumbnails/' . $product->image;
unlink($image);
unlink($imagemedium);
unlink($imagethumb);
$product->delete();
ResponseCache::clear();
return redirect()->route('admin.product.index');
}
}