علیرضا
5 سال پیش توسط علیرضا مطرح شد
8 پاسخ

دو سئوال ساده در مورد mvc

سلام خستنه باشید و ممنون از پاسخگوییتونم .
من با 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- میشه برای قسمت قالب سایت و نمایش آیتم ها از مدل های بخش ادمین استفاده کنم؟و از تکرار کد جلوگیری کنم؟


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش آپدیت شد
0

با 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 5 سال پیش مطرح شد
0

Model در ساختار MVC کارهای مربوط به اطلاعات ارسالی به Controller و اطلاعاتی که در ویو ها باهاشون کار میشه رو به عهده داره.. در واقع شما به شکلی ابتدایی اما صحیح قسمت‌ها رو جدا کردید

اما برای ویو ها ، می‌تونید از یه مَستر پیج استفاده کنید که اون همه چیزهای لازم رو (header, footer و اطلاعات ارسالی به Header برای داینامیک سازی) رندر کنه.


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

@ali.bayat
خیلی ممنونم از شما اینکه من ۵ متد کمکی رو تو Model مادر به کار بردم صحیح هست؟ خب اینکه میگید ابتدایی متوجه نمیشم
تو اکثر آموزش هایی که دیدم برای همه یه مدل مادر در نظر میگیرند
و برای مستر پیج ها میشه یکمی توضیح بدید ؟تو درون مستر پیج ها مگه نه باید بصور مستقیم از Model استفاده کنیم؟که اینم در تضاد با ساختار MVC است؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

بله در فریم‌ورک‌ لاراول هم یه مدل اصلی داریم که مدل‌های دیگه از اون مشتق شده‌اند. البته در لاراول ORM (object relational mapping) هم داریم که از طریق Eloquent پیاده‌سازی میشه و متد‌های فراوانی داره.. برای این گفتم که روش شما کمی ابتداییه وگرنه مشکلی نداره

در خصوص قسمت دوم سوال:
خیر.. ما نباید از مدل ها در ویو استفاده کنیم.. ما از طریق کنترلر با مدل در ارتباط هستیم، اطلاعات رو جمع‌آوری می‌کنیم و از کنترلر به ویو می‌فرستیم.

مستر پیج رو این‌جوری در نظر بگیرید که یه ویو ساده هست که می‌تونه به جز محتویاتی که شما داخلش قرار می‌دهید، ویو های دیگه رو هم داخل خودش رندر کنه


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

@ali.bayat
سپاس فراوان از شما فکرکنم منظورم شما مسترپیج کتابخونه هایی مثل twig یا blade لاراول باشه که همچین کارهایی انجام میدن؟
خب من وقتی رندر کردم بصورت استاتیک هست فکرکنم
منو هارو از کجا داینامیک کنم؟(چطوری با مدل ارتباط برقرار کنن)


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش آپدیت شد
0

با 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 شامل منوهای دینامیک شماست و میتونید اون رو در ویو اصلی استفاده کنید.


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش آپدیت شد
0

@ali.bayat
شما یکمی پیچیدش کردین
من همچین کاری میکنم

 view::rander('index.php',[
                                        title=>'Home',
                                        menu=>$menu
                                        ])

البته آرایه بالا extract میکنم
منوهام رو بصورت ابجکت یا آرایه میفرستم به صفحه ی اصلی
بعداز اونجایی که هدر رو اینکلود میکنم تو صفحه اصلی . تو هدر یه فورایچ میزنم و نمایش میدم درسته؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

متن کد بالا رو ویرایش کردم.
مثالی که براتون قرار دادم نمونه بسیار ساده از پیاده‌سازی ساختار MVC در Php هست. حالات دیگه هم وجود دارند


علیرضا
تخصص : فرانت اند وب
@sep28 5 سال پیش مطرح شد
0

@ali.bayat
خیلی ممنونم از شما


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام