شی ساختن در کنترلر

پرسیده شده
فعالیت 957 روز پیش
دیده شده 389 بار
0

سلام و درود

 

اگر در یک کنترلر ، شی ساخته بشه از یک کنترلر دیگه ، چه اشکالاتی داره ؟

 

مثلا : اینجا من از HomeController شی ساختم در کنترلر ContactController

 

public function delete_contact()
    {
        global $request ;
        $id = $request->get_route_param('id');

        $this->contact_model->delete(['id'=>$id]);

        $data = (new HomeController())->get_contact();
        view('index', $data);

    }

 

اصول سالید رو نقض میکنه یا میتونه درست باشه ؟

 

فایل پیوست

هادی قاسمی
هادی قاسمی

19 شهریور 00

0
حذف شده

درود
خیلی بهتره که این وابستگی ها از طریق construct تزریق بشه، داخل construct کنترلرتون ازش یه new بگیرید.

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

داخل مدلتون یه متد بسازید به اسم getContracts و queryتون رو داخلش قرار بدید

فایل پیوست

امیر صالحی

توسط

امیر صالحی

20 شهریور 00

حذف شده
ممنون . علت بهتر بودن این که این وابستگی ها رو توی construct بزاریم چی هست ؟ یکم توضیح بدین لطفا .
هادی قاسمی

21 شهریور 00

حذف شده
زمانی که شما مستقیم به این شکل در متد delete_contact خودتون میایید از یک کلاسی new میکنید، این مورد یه وابستگی ایجاد میکنه و اصل dependency inversion نقض میشه. ما باید وابستگی ها رو از طریق constructor تزریق کنیم تا جایگزینی و اینکه دقیقا چه کلاسی رو به این کنترلر پاس بدیم به راحتی باشه و اصلی رو نقص نکنه
امیر صالحی

21 شهریور 00

0
حذف شده

سلام.

بهتره به این شکل نوشته بشه:

public function delete_contact(HomeController $homeController)
{
    global $request ;
    $id = $request->get_route_param('id');

    $this->contact_model->delete(['id'=>$id]);

    $data = $homeController->get_contact();
    view('index', $data);
}

درضمن نکته ی امیرصالحی در مورد استفاده از مدل contact رو هم توجه کنید. چون کنترلر برای کارهای لایه ی دیتابیس نیست و فقط یک هندلر و گرداننده هست.

فایل پیوست

محسن موحد

توسط

محسن موحد

21 شهریور 00

حذف شده
ممنون از راهنمایی . اینجا دیگه نقض اصول سالید نداریم درسته ؟
هادی قاسمی

9 مهر 00

حذف شده
اصول SOLID برای یک کلاس یا چند کلاس بهم مرتبط معنی پیدا میکنه. در این متد فقط یک مفهوم dependency injection رو میشه مطرح کرد.
محسن موحد

9 مهر 00

حذف شده
اما اگر در مورد کدهایی که نوشتید نظرمو بخواین، از متغیر global بهتره این شکلی استفاده نکنید و این موارد بعنوان یک پراپرتی در یک کلاس مثل کامپوننت ایجاد شوند و ساختار MVC به شکلی پیاده بشه که کنترلرها به این پراپرتی ها دسترسی داشته باشن.
محسن موحد

9 مهر 00

حذف شده
مدل کانتکت باید ساخته بشه و متد delete و get هم از این مدل فراخوانی بشه.
محسن موحد

9 مهر 00

حذف شده
متد delete، اگر بخوام یه ساختار معرفی کنم: یه متد findModel میتونی داخل کنترلر بسازی و پارامتر id رو به این متد پاس بدی و متد delete در model نیاز به پارامتری نداره، نتیجه ی کدی که مینویسی میتونه به این شکل در بیاد: $this->findModel($id)->delete();
محسن موحد

9 مهر 00

حذف شده
نکته ی دیگه، پارامتر id در delete ایندکس id داره، این مدل ایندکس دادن برای موقعیه که اگر ایندکس تغییر کرد باز هم متد delete کار کنه بنابراین اگر فقط برای id تعبیه شده، ایندکس دادن بی معنی میشه... مورد دیگه اینکه از این روشی که پارامتر ایندکس دار پاس دادی میتونی برای edit استفاده کنی...
محسن موحد

9 مهر 00

حذف شده
برای view باید یک کلاس مجزا ساخت و در کنترلر اصلی متدی مثلا به اسم render ساخت و جوری طراحی کرد که layout رو هم مثل فریمورک های حرفه ای بتونیم مدیریت کنیم و هر کدوم جزئی جدا داشته باشن و تکه تکه بهم وصل شده باشن. البته این پیشنهادها میدونم خیلی گنگ بنظر میرسه و شاید چیزی دستگیرت نشه ولی خواستم نکاتیو بگم که بتونی در فریمورک های PHP و سرچ دنبال همچین ساختارهایی بگردی.
محسن موحد

9 مهر 00

حذف شده
ممنون از وقتی که گذاشتین . دقیقا الان که پروژه 7gallery رو شروع کردم ، متوجه نکاتی که گفتین میشم . برای عمیق شدن در مباحث لاراول و کلا مباحث سطح بالا چه پیشنهادی دارین ؟
هادی قاسمی

10 مهر 00

حذف شده
اگر میخوای منطق یک فریمورک رو بدونی، اول باید خود ابزاری که اون فریمورک رو ساخته رو درک عمیقی ازش داشته باشی، در حین اینکه پروژه هاتو با لاراول پیاده میکنی، روی مسائل شی گرایی و ساختار MVC کار کن و کد زیاد بخون و همچنین ابتدا برای درک بهتر میتونی از فریموک های سبکی مثه ci یا fat-free میتونی کمک بگیری و بعد در مورد فریمورک های مثه لاراول و یی2...
محسن موحد

10 مهر 00

حذف شده
من پیشنهام اینه فریمورک yii2 رو هم بررسی کنید. ساختار و کدنویسیش ایده های زیادی میتونه بده.
محسن موحد

10 مهر 00

حذف شده
توصیم اینه حتما از منابع اصلی برای هر مطلب استفاده کنید. جتی اگر آموزش ویدیویی میبینید حتما در همون مورد سرچ کنید و ببینید در منابع اصلی چی اومده! خیلی وقتا میبینید نتیجه ی سرچ با چیزی که یاد گرفتید متفاوته.
محسن موحد

10 مهر 00

حذف شده
توصیه ها زیاده من هم بخوام مثه همه توصیه کنم یخورده کلیشه ای میشه، من فقط بهت توصیه میکنم همیشه مقاله بخون. تا میتونی مقاله بخون و کد بخون... توو گذر زمان فرضا بعد از چند ماه خودت اثراتشو حس میکنی
محسن موحد

10 مهر 00

حذف شده
و سعی کن چیزی که یاد میگیریو آموزش بدی یا برای مقاله بنویسی یا براش کد بنویسی و منتشر کنی، برای مثال وقتی بخوای مقاله ای بنویسی یا تووی پرسشو پاسخی شرکت کنی و پاسخ سوالات رو بدی، نیاز داری مطالعت رو بیشتر کنی که یوقت اشتباه مطلبی رو بیان نکنی
محسن موحد

10 مهر 00

حذف شده
البته این رو بگم، به هر قیمتی سعی نکن در مورد چیزی مقاله ای یا ... منتشر کنی، قبلش انقدر در اون مورد اطلاعات جمع کن که وقتی مطلبی رو منتشر میکنی برای حرفهایی که میزنی چنتا سند قوی داشته باشی و سند هات هم منابع اصلی اون تکنولوژی باید باشن
محسن موحد

10 مهر 00

حذف شده
یه مقاله ای میخوندم یه جمله ی خیلی قشنگیو اورده بود که منتسب شده بود به ارسطو:We are what we repeatedly do.Excellence, then, is not an act but a habit
محسن موحد

10 مهر 00

حذف شده
بنابراین خودت تصمیم میگیری که به چه چیزی عادت کنی و چقدر در اون مسیر رشد کنی.
محسن موحد

10 مهر 00

حذف شده
نکته ی آخرو هم بگمو تمام، ببین اون مقاله ای که خوندم آخر جمله نوشته بود ارسطو، یکی دیگه باشه شاید بهمین بسنده کنه و بگه این جمله مال ارسطو هست و به هیچ کجای دنیا هم برنمیخوره ولی من در مورد همین موضوع ساده هم سرچ کردم که دیدم این جمله ای نبوده که ارسطو بیان کرده باشه... این مثالو زدم که بگم توو کارت اینجوری باید تحقیق کنی. موفق باشی
محسن موحد

10 مهر 00

حذف شده
ممنونم واقعا خدا خیرتون بده که وقت میزارید دلسوزانه
هادی قاسمی

11 مهر 00

حذف شده
فقط اگر میشه چنتا منبع برای مقاله خوندن و کد خوندن بهم معرفی کنید لطفا یا حتی کتاب . یا اینکه مثلا وقتی یک چیزیو رو نگاه میکنم و بعد سرچ میکنم چنتا روش و راه داره ، راه بهینه تر و درست رو چطوری تشخیص بدم ؟
هادی قاسمی

11 مهر 00