سلام خستنه باشید و ممنون از پاسخگوییتونم .
من با php mvc کد میزنم و چندتا ابهام برام بوجود اومد که اینجا میپرسم
1-من یک کلاس Model دارم که این مادر همه model هاست. من توی این مدل اتصال به دیتابیس دارم که در کنارش از 5 متد کمکی
به نام های(insert.edait.delete,select که مربوط به دیتبایس هستند و یه متد آپلودر که کار آپلود رو انجام میده
میخواستم بدونم جای این 5 متد مناسبه تو همین فایل یا کار بهتری میشه کرد.
2-فرض کنی من 5 تا صفحه به این شکل دارم
view::rander('header.php',[
title=>'Home',
])
// include file header.php
// content
view::rander('footer.php',[
title=>'Home',
])
// include file footer.php
من میخام منوهام رو که درون فایل هدر قرار داره داینامیک کنم
از اونجایی که نمیتونم بطور مستقیم از مدل تو ویو استفاده کنم چیکار باید کنم؟
3- میشه برای قسمت قالب سایت و نمایش آیتم ها از مدل های بخش ادمین استفاده کنم؟و از تکرار کد جلوگیری کنم؟
با PHP هم میشه بسادگی همچین چیزی رو پیادهسازی کرد. من یه مثال ساده براتون میزنم.
کافیه فایل های منو رو بریزی داخل یه فایل و درونش از یه متغیر استفاده کنی مثلا menus.view.php:
<?php
foreach ($menus as $Item => $Link) {
$RenderedMenu .= '<a href="'.$Link.'"> '.$Item.' </a><br />';
}
return $RenderedMenu;
?>
سپس داخل کنترلر: اول متغییر menus رو تعریف میکنی و بعد فایل رو require میکنی:
$menus = [
'Item 1' => 'https://link1',
'Item 2' => 'https://link2',
'Item 3' => 'https://link3',
];
$dynamicMenu = require 'menus.view.php';
حالا متغیر dynamicMenu شامل منوهای دینامیک شماست و میتونید اون رو در ویو اصلی استفاده کنید.
Model در ساختار MVC کارهای مربوط به اطلاعات ارسالی به Controller و اطلاعاتی که در ویو ها باهاشون کار میشه رو به عهده داره.. در واقع شما به شکلی ابتدایی اما صحیح قسمتها رو جدا کردید
اما برای ویو ها ، میتونید از یه مَستر پیج استفاده کنید که اون همه چیزهای لازم رو (header, footer و اطلاعات ارسالی به Header برای داینامیک سازی) رندر کنه.
@ali.bayat
خیلی ممنونم از شما اینکه من ۵ متد کمکی رو تو Model مادر به کار بردم صحیح هست؟ خب اینکه میگید ابتدایی متوجه نمیشم
تو اکثر آموزش هایی که دیدم برای همه یه مدل مادر در نظر میگیرند
و برای مستر پیج ها میشه یکمی توضیح بدید ؟تو درون مستر پیج ها مگه نه باید بصور مستقیم از Model استفاده کنیم؟که اینم در تضاد با ساختار MVC است؟
بله در فریمورک لاراول هم یه مدل اصلی داریم که مدلهای دیگه از اون مشتق شدهاند. البته در لاراول ORM (object relational mapping) هم داریم که از طریق Eloquent پیادهسازی میشه و متدهای فراوانی داره.. برای این گفتم که روش شما کمی ابتداییه وگرنه مشکلی نداره
در خصوص قسمت دوم سوال:
خیر.. ما نباید از مدل ها در ویو استفاده کنیم.. ما از طریق کنترلر با مدل در ارتباط هستیم، اطلاعات رو جمعآوری میکنیم و از کنترلر به ویو میفرستیم.
مستر پیج رو اینجوری در نظر بگیرید که یه ویو ساده هست که میتونه به جز محتویاتی که شما داخلش قرار میدهید، ویو های دیگه رو هم داخل خودش رندر کنه
@ali.bayat
سپاس فراوان از شما فکرکنم منظورم شما مسترپیج کتابخونه هایی مثل twig یا blade لاراول باشه که همچین کارهایی انجام میدن؟
خب من وقتی رندر کردم بصورت استاتیک هست فکرکنم
منو هارو از کجا داینامیک کنم؟(چطوری با مدل ارتباط برقرار کنن)
با PHP هم میشه بسادگی همچین چیزی رو پیادهسازی کرد. من یه مثال ساده براتون میزنم.
کافیه فایل های منو رو بریزی داخل یه فایل و درونش از یه متغیر استفاده کنی مثلا menus.view.php:
<?php
foreach ($menus as $Item => $Link) {
$RenderedMenu .= '<a href="'.$Link.'"> '.$Item.' </a><br />';
}
return $RenderedMenu;
?>
سپس داخل کنترلر: اول متغییر menus رو تعریف میکنی و بعد فایل رو require میکنی:
$menus = [
'Item 1' => 'https://link1',
'Item 2' => 'https://link2',
'Item 3' => 'https://link3',
];
$dynamicMenu = require 'menus.view.php';
حالا متغیر dynamicMenu شامل منوهای دینامیک شماست و میتونید اون رو در ویو اصلی استفاده کنید.
@ali.bayat
شما یکمی پیچیدش کردین
من همچین کاری میکنم
view::rander('index.php',[
title=>'Home',
menu=>$menu
])
البته آرایه بالا extract میکنم
منوهام رو بصورت ابجکت یا آرایه میفرستم به صفحه ی اصلی
بعداز اونجایی که هدر رو اینکلود میکنم تو صفحه اصلی . تو هدر یه فورایچ میزنم و نمایش میدم درسته؟
متن کد بالا رو ویرایش کردم.
مثالی که براتون قرار دادم نمونه بسیار ساده از پیادهسازی ساختار MVC در Php هست. حالات دیگه هم وجود دارند
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟