Я направляюсь в правильном направлении с помощью PHP?


Я делал на PHP уже около трех лет, с немного другом направлении, чем книги, которые я читал и методом проб и ошибок.

Я в настоящее время кодирования, что, я надеюсь, довольно хорошее приложение и я решила броситься в огонь и разлетелось на куски (ха-ха, ты думаешь, это хорошая заявка!!)

За последний год я пытался улучшить свой процесс разработки путем разделения его лучше и движется к СОЭ идея типа. На данный момент большая часть моей работы является процедурным, но я начинаю, наконец, попасть в ООП стороны и хотя бы намочить ноги.

приведенный ниже код-это то, что я считаю мой контроллер я думаю? Но на самом деле это не очень важно, меня больше волнует, будет ли или не то, что я пытаюсь сделать в этом скрипте подвергается нападению в правильном направлении.

Это для подающих заявления/курорт, у нас есть десять разных каютах и на этой странице, cabins.php отвечающий за извлечение различных данных, необходимых для каждой каюте.

Обратите внимание, что мои комментарии, чтобы объяснить мои мысли к этой группе, они не нужные комментарии в истинном смысле, просто чтобы попробовать и помочь объяснить, что я думаю, что происходит!

Если это на широкую или беспомощным, прости меня.

Здесь мы идем:

<?php
include("includes/configure.php");
include("includes/content_generation.php");



//Generate sub menus and collect info from database
if ($filename == 'cabins'){
$cabin_title = 'Neato Lodge Cabins';

    if(isset($_GET['cabin'])){
      $cabin = $_GET['cabin'];
        if(!isset($type)){
        header('Location: http://www.mysite.com/cabins.php?cabin='.$cabin.'&type=cabin_information');
        }
      $sub_menu_items['cabin_information']= 'Cabin Information';
      $sub_menu_items['reservation_info']= 'Reservation Info';
      $sub_menu_items['rates']= 'Rates';
      $sub_menu_items['cabin_pictures']= 'Cabin Pictures';




    if(isset($_GET['type'])){
        $type = $_GET['type'];

        switch ($type){

        case 'cabin_information':
        //I do a join here because I am storing cabin photos in their own table that shares cabin ID. This is my feeble attempt at trying to normalize my data, seemed like a good start. The image pulled is needed later in the view.
         $query = "SELECT cabin_name,cabin_description,bed_one,bed_two,bed_extra,image FROM cabin_content  INNER JOIN    cabin_images  ON cabin_content.cabin_id = cabin_images.cabin_id WHERE cabin_content.cabin_id = '$cabin'";
          $data = mysqli_query($dbc, $query);
          $row = mysqli_fetch_array($data);

          $main = '<p class ="first">'.$row['cabin_description'];
          $main .=  '<p class ="big">Sleeping Information</p>
          <p class ="bedrooms">Bedroom One: <span class = "bed">'.$row['bed_one'].'</span></p>
          <p class ="bedrooms">Bedroom Two: <span class = "bed">'.$row['bed_two'].'</span></p>
          <p class ="bedrooms">Additional Sleeping: <span class = "bed">'.$row['bed_extra'].'</span></p>
          <p>For occupany information, available dates and other reservation rules click the reservation info tab</p>';

          break;

            case 'reservation_info':

            $query = "SELECT cabin_name, peak_week, max_occupancy,image FROM cabin_content  INNER JOIN cabin_images  ON cabin_content.cabin_id = cabin_images.cabin_id WHERE cabin_content.cabin_id = '$cabin'";
              $data = mysqli_query($dbc, $query);
              $row = mysqli_fetch_array($data);

              $main = '<p class ="first">'.$row['cabin_name'].' is available to be rented from May through September, please read below for occupancy information and reservation rules and requirements. '.$row['cabin_name'].' has a maximum occupancy of '.$row['max_occupancy'].' adults for the posted rates, extra charges apply for additional adults or children.</p>
             <p class ="big">Seasonal Reservation Information</p>
             <p class ="bedrooms">Spring Season: <span class = "bed">'.$row['cabin_name'].' is available for rent with a five night minimum stay with a special discounted rate.</span></p>
              <p class ="bedrooms">Peak Season: <span class = "bed">'.$row['cabin_name'].' is available for rent with a six night minimum stay checking in on '.$row['peak_week'].' and checking out the following '.$row['peak_week'].'. If booking within thirty days of planned stay, cabin may be available with a five night minimum.</span></p>
              <p class ="bedrooms">Fall Season: <span class = "bed">'.$row['cabin_name'].' is available for rent with a three night minimum stay.</span></p>';


              break;

              case 'rates':

              $query = "SELECT cabin_name, spring_weekly, peak_weekly, fall_weekly, adult_weekly,spring_nightly, peak_nightly, fall_nightly, adult_nightly, youth_nightly, youth_weekly, max_occupancy,image FROM cabin_content  INNER JOIN cabin_images  ON cabin_content.cabin_id = cabin_images.cabin_id WHERE cabin_content.cabin_id = '$cabin'";
              $data = mysqli_query($dbc, $query);
              $row = mysqli_fetch_array($data);

              $main = '<p class ="first"> Weekly and nightly rates are for up to the cabin maximum occupancy of '.($row['max_occupancy']).'.</p>
               <p class ="big">Seasonal Rate Information</p>
            <table cellspacing="2" cellpadding="3" >
                  <tr>
                    <td class ="clm_head_lft">Season</td>
                    <td class ="clm_head">Weekly Rate</td>
                    <td class ="clm_head">Nightly Rate</td>
                    <td class ="clm_head">Additional Occupants</td>
                  </tr>
                  <tr>
                    <td class ="table_head">Spring Season (May 5th - June 15th:</td>
                    <td><span class = "rate"><del>'.$row['fall_weekly'].'</del> </span><span class = "special_rate">'.$row['spring_weekly'].'</span></td>
                    <td><span class = "rate">'.$row['spring_nightly'].'</span></td>
                    <td rowspan="3"><span class = "additional">Additional adults are '.$row['adult_weekly'].' per week and '.$row['adult_nightly'].' per night, youth under 18 are '.$row['youth_weekly'].' per week and '.$row['youth_nightly'].' per night. </span></td>
                  </tr>
                  <tr>
                    <td class ="table_head">Peak Season:</td>
                    <td><span class = "rate">'.$row['peak_weekly'].'</span></td>
                    <td><span class = "rate">'.$row['peak_nightly'].'</span></td>
                    <td></td>
                  </tr>
                  <tr>
                    <td class ="table_head">Fall Season:</td>
                    <td><span class = "rate">'.$row['fall_weekly'].'</span></td>
                    <td><span class = "rate">'.$row['fall_nightly'].'</span></td>
                    <td></td>
                  </tr>

                </table>';

                 break; 


        }
    }

 }



}

include("layout_includes/header.php");
include("layout_includes/cabins_layout.php");
include("layout_includes/footer.php");
?>


251
1
php
задан 3 декабря 2011 в 05:12 Источник Поделиться
Комментарии
1 ответ

Это не контроллер. Цель проектирования MVC является разделение интересов, более конкретно разделение домена-логики от пользовательского интерфейса.

Давайте посмотрим, где это не удается:

$main .=  '<p class ="big">Sleeping Information</p>
<p class ="bedrooms">Bedroom One: <span class = "bed">'.$row['bed_one'].'</span></p>
<p class ="bedrooms">Bedroom Two: <span class = "bed">'.$row['bed_two'].'</span></p>
<p class ="bedrooms">Additional Sleeping: <span class = "bed">'.$row['bed_extra'].'</span></p>
<p>For occupany information, available dates and other reservation rules click the reservation info tab</p>';

Сценарии:


  1. Нужно добавить еще один CSS-класс к любому из ваших пунктов

  2. Вам нужно изменить CSS-класс к любому из ваших пунктов

  3. Вам нужно преобразовать пункт в что-нибудь еще

  4. Нужно изменить текст пункта

  5. бла-бла-бла (есть много других вероятных сценариев, но я думаю, что первые 4 достаточно, чтобы проиллюстрировать мою точку зрения)

Пункты с 1 по 3 пользовательского интерфейса конкретных проблем. В MVC подход, они относятся к виду, а не в контроллере.

Точка 3 может быть пользователем касаются интерфейса, если тексты являются статическими, но могут также рассматриваться как проблемы данных. Таким же образом вы получаете данные из базы данных, вы могли бы собрать все эти статические тексты в файл конфигурации, а только смотреть на один файл, менять их через каждый вид в своем приложении. Что может считаться образцом подхода. Сказав, что это:

 $query = "SELECT cabin_name,cabin_description,bed_one,bed_two,bed_extra,image FROM cabin_content  INNER JOIN    cabin_images  ON cabin_content.cabin_id = cabin_images.cabin_id WHERE cabin_content.cabin_id = '$cabin'";
$data = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($data);

На самом деле не принадлежит контроллер. Самый простой подход будет иметь все ваши конкретные функциональные возможности базы данных в функции в отдельный файл:

// model file, lets call it "cabinModel.php"

function getCabinInformation($cabinID) {
$query = "SELECT cabin_name,cabin_description,bed_one,bed_two,bed_extra,image FROM cabin_content INNER JOIN cabin_images ON cabin_content.cabin_id = cabin_images.cabin_id WHERE cabin_content.cabin_id = '$cabinID'";
return mysqli_query($dbc, $query);
}

function getAllCabins() {
...
}

function deleteCabin($cabinID) {
...
}

// controller

include "cabinModel.php"

$row = getCabinInformation($cabin);

Таким образом функция, чтобы получить информацию кабиной доступна для всех контроллеров, вам не придется переписывать его каждый раз, когда вам это нужно. Не повторяйте себя.

Если есть любой HTML / CSS или любых других презентация логика в контроллере, и конечно никаких стойких логических данных, вы делаете это неправильно (с точки зрения проектирования MVC). Но MVC для небольших сайтов может быть излишним. Это правильный подход концептуально, но вам придется решить для себя, если это правильный выбор для вашего приложения. Но если вы решите это, вы должны следовать все как есть.

Очень простой подход, чтобы отделить представление от логики, чтобы использовать шаблонизатор. Есть довольно много их там, и нет это лучше, чем другие. Используя более важно, чем что.

И, конечно, это не больно, если вы не пытайтесь изобретать колесо и начал с помощью фреймворка. Или если это кажется слишком много, микрофреймворк.

Там это часто цитируют статьи на Расмус Лердорф , что некоторые люди воспринимают как пропаганду против шаблонизаторов и фреймворков. Это не только смысл статьи заключается в том, что вы не должны использовать их. В статье есть очень хороший и аккуратный подход о том, как получить вид в MVC структуры из коробки, без дополнительной сложностью третьим библиотека. Если вы действительно не хотите использовать какой-либо третьей библиотеки, необходимо скопировать стиль Расмус'.

2
ответ дан 3 декабря 2011 в 07:12 Источник Поделиться