نمایش نتایج 1 تا 2 از 2

نام تاپیک: مشکل با یک مثال برای پیاده سازی مدل mvc

  1. #1

    مشکل با یک مثال برای پیاده سازی مدل mvc

    یه مثال تو یه سایت دیدم در مورد مدل mvc ولی تو پیاده سازی و فهمش یه مقدار مشکل دارم. اگه کسی راهنماییم کنه خیلی ممنونش می شم:
    توضیح مختصر: وقتی کاربر صفحه (index.php) رو باز می کنه title یک سری اطلاعات از پایگاه داده نمایش داده می شه. حالا هر عنوان خودش حاوی یک لینک می شه تا بشه باقی اطلاعات اون رو مشاهده کرد. که این نمایش اطلاعات به شکل index.php/show?id=1 هست. اطلاعات رو می شه به صورت یک لیست دید ولی وقتی بخوام که اطلاعات رو با استفاده از index.php/show?id=1 بخونم به مشکل بر می خورم و not found می ده!
    حالا من فایلا رو پایین می ذارم در آخر هم کل فایل رو به همراه دیتابیس برای آپلود می ذارم:
    //model.php
    <?php
    function open_database_connection()
    {
    $link = mysql_connect('localhost', 'root', '');
    mysql_select_db('blog_db', $link);

    return $link;
    }

    function close_database_connection($link)
    {
    mysql_close($link);
    }

    function get_all_posts()
    {
    $link = open_database_connection();

    $result = mysql_query('SELECT id, title FROM post', $link);
    $posts = array();
    while ($row = mysql_fetch_assoc($result)) {
    $posts[] = $row;
    }
    close_database_connection($link);

    return $posts;
    }

    function get_post_by_id($id)
    {
    $link = open_database_connection();

    $id = mysql_real_escape_string($id);
    $query = 'SELECT date, title, body FROM post WHERE id = '.$id;
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);

    close_database_connection($link);

    return $row;
    }


    //index.php
    <?php
    require_once 'model.php';
    require_once 'controllers.php';

    // route the request internally
    $uri = $_SERVER['REQUEST_URI'];
    if ($uri == '/index.php') {
    list_action();
    } elseif ($uri == '/index.php/show' && isset($_GET['id'])) {
    show_action($_GET['id']);
    } else {
    header('Status: 404 Not Found');
    echo '<html><body><h1>Page Not Found</h1></body></html>';
    }


    //controllers.php
    <?php
    function list_action()
    {
    $posts = get_all_posts();
    require 'templates/list.php';
    }

    function show_action($id)
    {
    $post = get_post_by_id($id);
    require 'templates/show.php';
    }


    در ضمن تو پوشه templates هم فایلای زیر موجوده:
    //layout.php
    <html>
    <head>
    <title><?php echo $title ?></title>
    </head>
    <body>
    <?php echo $content ?>
    </body>
    </html>


    //list.php
    <?php $title = 'List of Posts' ?>

    <?php ob_start() ?>
    <h1>List of Posts</h1>
    <ul>
    <?php foreach ($posts as $post): ?>
    <li>
    <a href="/show?id=<?php echo $post['id'] ?>">
    <?php echo $post['title'] ?>
    </a>
    </li>
    <?php endforeach; ?>
    </ul>
    <?php $content = ob_get_clean() ?>

    <?php include 'layout.php' ?>


    //show.php
    <?php $title = $post['title'] ?>

    <?php ob_start() ?>
    <h1><?php echo $post['title'] ?></h1>

    <div class="date"><?php echo $post['date'] ?></div>
    <div class="body">
    <?php echo $post['body'] ?>
    </div>
    <?php $content = ob_get_clean() ?>

    <?php include 'layout.php' ?>


    فایل های ضمیمه فایل های ضمیمه

  2. #2

    نقل قول: مشکل با یک مثال برای پیاده سازی مدل mvc

    مقدار REQUEST_URI کوئری هم با خودش داره یعنی اون شرط شما صحیح نیست اینجوری باید باشه:
    elseif(preg_match('@^\/index\.php\/show(.*)@i', $uri)!=0 && isset($_GET['id'])) {
    show_action($_GET['id']);
    }

    این روش هم خشکتر عمل میکنه ولی سریعتر:
    elseif(substr(strtolower($uri),0,15)=='/index.php/show') && isset($_GET['id'])){
    show_action($_GET['id']);
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •