۳ آرمین صادقیان
ایجاد کنترلر جدا برای سرچ
جامعه پی اچ پی ایجاد شده در ۲۲ تیر ۱۴۰۱

سلام. وقت بخیر

توی ویدیو کدهای مربوط به سرچ توی ProductsController نوشته شد ولی از نظر clean code و اصول سالید بهتر نیست یه کنترلر جدا فقط برای سرچ بسازیم؟

class SearchsController extends Controller
{
    public function search(Request $request)
    {
        $products = null;
        if ($request->has('search')) {
            $products = Product::where('title', 'Like', '%' . $request->input('search') . '%')->get();
        } else {
            $products = Product::all();
        }
        $categories = Category::all();
        return view('frontend.products.all', compact('products', 'categories'));
    }
}

با route زیر:

Route::get('', [SearchsController::class, 'search'])->name('home.products.search');

اینجوری بهتر نیست؟؟

سلام دوست عزیز

با هدف ریفکتور جای این مورد در کنترلر نیست و باید در مدل ایجاد کنید.

برای سرچ و فیلترهاتون میتونید در مدلتون از scope‌ها در لاراول استفاده کنید

به نمونه زیر دقت کنید

  public function scopeFilters(Builder $builder, array $params)
	    {
	        if (isset($params['search'])) {
	            $builder
	                ->where('title', 'like', "%{$params['search']}%")
	                ->orWhere('slug', 'like', "%{$params['search']}%")
	                ->orWhere('image', 'like', "%{$params['search']}%")
	        }
	        return $builder;
	    }

موفق باشید ?

محمد گازری ۲۲ تیر ۱۴۰۱، ۰۷:۴۲

حالا میتونید با مثال بگید از این scope که توی مدل ساختم چجوری توی کنترلر ازش استفاده کنم تا سرچ کار کنه؟

البته میدونم این مباحث تخصصی لاراول برای این دوره نیست ولی برای کسب تجربه و آشنایی بیشتر با لاراول میپرسم

آرمین صادقیان ۲۲ تیر ۱۴۰۱، ۰۸:۰۰

شما راحت سوالتون رو بپرسید موردی نداره

    /**
	     * Display a listing of the resource.
	     *
	     */
	    public function index(Request $request)
	    {
	        $books = Book::latest()
	            ->filters($request->all())
	            ->paginate()
	            ->withQueryString();
	        return view('admin.pages.books.index', compact('books'));
	    }
بهترین پاسخ
محمد گازری ۲۲ تیر ۱۴۰۱، ۰۸:۱۱