Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Framework
 
 автор: Noindex   (22.09.2010 в 18:14)   письмо автору
 
 

привет. начал изучать фрэймворки по книги PHP практика создания приложений (2изд)
и не понимаю для чего они нужны и КАК они ускоряют разработку приложений???
вот например класс field_text - что он делает? проверяет данные при отправке или создаёт элемент на странице? зачем в нём вобще какие-то стили, веть это уже HTML/CSS а не php?
обьясните пожалуста!!!

  Ответить  
 
 автор: psychomc   (22.09.2010 в 18:25)   письмо автору
 
   для: Noindex   (22.09.2010 в 18:14)
 

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

  Ответить  
 
 автор: Noindex   (22.09.2010 в 18:38)   письмо автору
 
   для: psychomc   (22.09.2010 в 18:25)
 

ну всёже как фреймворк ускоряит работу? (например класс для текстового поля)? мне что вместо
echo '<input type=text>'
писать класс чтоль я никак не понимаю их предназначение.
может у кого есть очень хорошая и подробная статья на эту тему?

  Ответить  
 
 автор: nikita2206   (22.09.2010 в 18:46)   письмо автору
 
   для: Noindex   (22.09.2010 в 18:38)
 

Когда надо будет сделать более ли менее крупный проект, то ты запутаешься там в своих echo '<input type=text>'

  Ответить  
 
 автор: Noindex   (22.09.2010 в 18:55)   письмо автору
 
   для: nikita2206   (22.09.2010 в 18:46)
 

а в куче производных классах не запутаюсь?

  Ответить  
 
 автор: nikita2206   (22.09.2010 в 19:27)   письмо автору
 
   для: Noindex   (22.09.2010 в 18:55)
 

нет

  Ответить  
 
 автор: psychomc   (22.09.2010 в 18:52)   письмо автору
 
   для: Noindex   (22.09.2010 в 18:38)
 

фреймворк - это, как правило, набор связанных модулей для быстрого решения определенных задач. что-то типа базового функционала. туда могут входить классы для упрощения работы с субд, шаблонизатор, постраничная навигация, класс для работы с чпу, класс для отправки почты и т.п. цель одна - взять готовый каркас/интерфейся и быстро (намного быстрее чем с нуля) собрать систему

вот нашлось кое-что здесь
http://softtime.ru/forum/srch.php?id_forum=1&name=%F4%F0%E5%E9%EC%E2%EE%F0%EA&numberthemes=30&srchwhere=1&id_forum=0&logic=1&send=%CD%E0%E9%F2%E8

  Ответить  
 
 автор: Noindex   (22.09.2010 в 19:08)   письмо автору
 
   для: psychomc   (22.09.2010 в 18:52)
 

вот товарищ сверху уверяет что это

<?php
  
////////////////////////////////////////////////////////////
  // 2005-2008 (C) Кузнецов М.В., Симдянов И.В.
  // PHP. Практика создания Web-сайтов
  // IT-студия SoftTime 
  // http://www.softtime.ru   - портал по Web-программированию
  // http://www.softtime.biz  - коммерческие услуги
  // http://www.softtime.mobi - мобильные проекты
  // http://www.softtime.org  - некоммерческие проекты
  ////////////////////////////////////////////////////////////
  // Выставляем уровень обработки ошибок 
  // (http://www.softtime.ru/info/articlephp.php?id_article=23)
  
error_reporting(E_ALL & ~E_NOTICE);

  
////////////////////////////////////////////////////////////
  // Текстовое поле text
  ////////////////////////////////////////////////////////////

  
class field_text extends field
  
{
    
// Размер текстового поля
    
public $size;
    
// Максимальный размер вводимых данных
    
public $maxlength;
    
// Конструктор класса
    
function __construct($name
                   
$caption
                   
$is_required false
                   
$value "",
                   
$maxlength 255,
                   
$size 41,
                   
$parameters ""
                   
$help "",
                   
$help_url "")
    {
      
// Вызываем конструктор базового класса field для 
      // инициализации его данных
      
parent::__construct($name
                   
"text"
                   
$caption
                   
$is_required
                   
$value,
                   
$parameters
                   
$help,
                   
$help_url);
      
// Инициализируем члены класса
      
$this->size $size;
      
$this->maxlength $maxlength;
    }

    
// Метод, для возврата имени названия поля
    // и самого тэга элемента управления
    
function get_html()
    {
      
// Если элементы оформления не пусты - учитываем их
      
if(!empty($this->css_style))
      {
        
$style "style=\"".$this->css_style."\"";
      }
      else 
$style "";
      if(!empty(
$this->css_class))
      {
        
$class "class=\"".$this->css_class."\"";
      }
      else 
$class "";

      
// Если определены размеры - учитываем их
      
if(!empty($this->size)) $size "size=".$this->size;
      else 
$size "";
      if(!empty(
$this->maxlength))
      {
        
$maxlength "maxlength=".$this->maxlength;
      }
      else 
$maxlength "";

      
// Формируем тэг
      
$tag "<input $style $class
                 type=\""
.$this->type."\" 
                 name=\""
.$this->name."\" 
                 value=\""
.
                 
htmlspecialchars($this->valueENT_QUOTES)."\"
                 
$size $maxlength>\n";

      
// Если поле обязательно, помечаем этот факт
      
if($this->is_required$this->caption .= "&nbsp;*";

      
// Формируем подсказку, если она имеется
      
$help "";
      if(!empty(
$this->help))
      {
        
$help .= "<span style='color:blue'>".
                        
nl2br($this->help)."</span>";
      }
      if(!empty(
$help)) $help .= "<br>";
      if(!empty(
$this->help_url))
      {
        
$help .= "<span style='color:blue'><a href=".
                  
$this->help_url.">помощь</a></span>";
      }

      return array(
$this->caption$tag$help);
    }

    
// Метод, проверяющий корректность переданных данных
    
function check()
    {
      
// Обезопасить текст перед внесением в базу данных
      
if (!get_magic_quotes_gpc())
      {
        
$this->value mysql_escape_string($this->value);
      }

      
// Если поле обязательно для заполнения
      
if($this->is_required)
      {
        
// Проверяем не пусто ли оно
        
if(empty($this->value))
        {
          return 
"Поле \"".$this->caption."\" не заполнено";
        }
      }

      return 
"";
    }
  }
?>


проще чем echo '<input type=text>'
что этот класс может ускорять? я быстрее напишу echo '<input type=text>' чем буду встраивать этот класс
но вопрос всёже не в этом
меня интересует предназначение этого класса! что он делает? и формирует текстовое поле и проверяет его и всё на свете чтоль?

  Ответить  
 
 автор: nikita2206   (22.09.2010 в 19:26)   письмо автору
 
   для: Noindex   (22.09.2010 в 19:08)
 

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

  Ответить  
 
 автор: psychomc   (22.09.2010 в 20:30)   письмо автору
 
   для: Noindex   (22.09.2010 в 19:08)
 

я уже написал psychomc (22.09.2010 в 18:25) для чего его лучше использовать

  Ответить  
 
 автор: Commander   (23.09.2010 в 03:46)   письмо автору
 
   для: Noindex   (22.09.2010 в 18:14)
 

Это при применении framework'а
<?php
$name 
= new field_text("name""Ваше имя",true,$_REQUEST["name"]);
$email = new field_text_email("email","Email",false,$_REQUEST["email"]);
$message = new field_textarea("message","Текст сообщения",true,$_REQUEST["message"]);
$form = new form(array("name"=>$name,"email"=>$email,"message"=>$message),"Добавить");
if (!empty(
$_POST)){
    
//Проверяем введенные данные
    
$error $form->check();
    if (empty(
$error)){
        
//Добавляем запись в гостевую
    
}
}
$form->print_form();
?>

А это - чистый PHP/HTML
<?php
if (!empty($_POST)){
    
$error = array();
    if (empty(
$_POST["name"])) $error[] = "Вы не ввели ваше имя";
    if (!empty(
$email)){
        
$pattern "#^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$#i";
        if (!
preg_match($pattern,$_POST["email"])) $error[] = "Вы указали некорректный email";
    }
    if (empty(
$_POST["message"])) $error[] = "Вы не ввели текст сообщения";
    if (empty(
$error)){
        
    }
}
?>
<html>
<body>
<form method="POST">
<table>
<tr><td>Ваше имя*: </td><td><input type="text" name="name" value="<?=$_POST["name"];?>  size=41 /></td></tr>
<tr><td>Ваш Email: </td><td><input type="text" name="email" value="<?=$_POST["email"];?>  size=41 /></td></tr>
<tr>
<td valign=top>Сообщение*: </td><td><textarea name="message" cols="35" rows="7"><?=$_POST["message"];?></textarea></td>
</tr>
<tr>
<td>&nbsp;</td><td><input type="submit" value="Добавить" /></td>
</tr>
</table>
</form>
</body>
</html>

Сравните, а затем представьте, что надо сделать форму добавления квартиры в каталог недвижимости. Что будет легче?

  Ответить  
 
 автор: Николай2357   (23.09.2010 в 07:02)   письмо автору
 
   для: Commander   (23.09.2010 в 03:46)
 

Второй естественно.

  Ответить  
 
 автор: Commander   (23.09.2010 в 07:55)   письмо автору
 
   для: Николай2357   (23.09.2010 в 07:02)
 

Я имею в виду - легче написать

  Ответить  
 
 автор: Николай2357   (23.09.2010 в 08:09)   письмо автору
 
   для: Commander   (23.09.2010 в 07:55)
 

Дык и я о том же. Если уж приводить пример, то корректный...
Вот теперь попробуйте тоже самое, что во втором примере, написать с помощью фреймворка.
С разметкой, с передачей параметров. Тогда и сравним, что легче.

  Ответить  
 
 автор: Commander   (23.09.2010 в 10:02)   письмо автору
 
   для: Николай2357   (23.09.2010 в 08:09)
 

Выдача в обоих примерах практически одинаковая. Применение фреймворка снижает гибкость - с этим не спорю. Зато большие формы писать на порядок легче становится.

С разметкой...

А с чего Вы решили, что в первом примере ни разметки, ни передачи параметров не будет?

  Ответить  
 
 автор: Николай2357   (23.09.2010 в 10:39)   письмо автору
 
   для: Commander   (23.09.2010 в 10:02)
 

В первом примере только форма. Во вторм - таблица.
По этому первый смотрится меньше. На самом деле первый написать, а тем более разобраться в нем, сложнее.
И потом, во втором валидация вынута в файл. Можно точно так же оформить функцией и объем кода еще уменьшится.
Вопрос это крайне спорный, от того и холивары. Обычно примеров не приводят - фреймворк лучше и всё.
Вот раз есть пример, хотелось бы досконально понять чем.

  Ответить  
 
 автор: Commander   (23.09.2010 в 11:23)   письмо автору
 
   для: Николай2357   (23.09.2010 в 10:39)
 


<form name=form  method=post><table><tr>
                      <td width=150 
                            valign=top>Ваше имя&nbsp;*:</td>
                      <td   valign=top><input  
                 type="text" 
                 name="name" 
                 value=""
                 size=41 maxlength=255>
</td>
                    </tr>
<tr>
                      <td width=150 
                            valign=top>Email:</td>
                      <td   valign=top><input  
                 type="text" 
                 name="email" 
                 value=""
                 size=41 maxlength=255>
</td>
                    </tr>
<tr>
                      <td width=150 
                            valign=top>Текст сообщения&nbsp;*:</td>
                      <td   valign=top><textarea  
              name="message"
              cols=35 rows=7   ></textarea>
</td>
                    </tr>
<tr>
              <td  ></td>
              <td  >
                <input class=button 
                       type=submit 
                       value="Добавить">
              </td>
            </tr>
</table></form>


Вот код, который выдает первый пример

  Ответить  
 
 автор: Николай2357   (23.09.2010 в 11:41)   письмо автору
 
   для: Commander   (23.09.2010 в 11:23)
 

Опа. Даже так... А если у меня другая верстка?
Я имел ввиду по отдельности.

  Ответить  
 
 автор: Commander   (23.09.2010 в 13:46)   письмо автору
 
   для: Николай2357   (23.09.2010 в 11:41)
 

Я почему и говорю, что гибкость падает. Но это плата за простоту разработки.

  Ответить  
 
 автор: Николай2357   (23.09.2010 в 15:39)   письмо автору
 
   для: Commander   (23.09.2010 в 13:46)
 

Так и не увидел я ни простоты, ни скорости разработки.
1. Я понимаю так. Есть класс валидатора допустим. Вот и пусть занимается своим прямым делом. Это скорость разработки.
2. Есть шаблон, в котором нормальная форма (HTML). Это простота.
3. Все это вместе - гибкость.

Допустим эту форму можно спокойно написать так:
<?php

$error 
'';

if (!empty(
$_POST))

    
$check = new ValidData();
    
$check -> checkData($_POST['name'], 'empty''Вы не ввели ваше имя');    
    
$check -> checkData($_POST['email'], 'email''Вы указали некорректный email');
    
$check -> checkData($_POST['message'], 'empty''Вы не ввели текст сообщения');
    
$error =  $check -> getError(false);    
    
    if (empty(
$error))
    { 
       
// Тут обработка   
    
}  
 }
?> 
<html> 
<body> 
<div style="color:#FF0000"><?php echo nl2br($error); ?></div>
<form method="POST"> 
<table> 
<tr><td>Ваше имя*: </td><td><input type="text" name="name" value="<?php echo $_POST['name'];?>"  size=41 /></td></tr> 
<tr><td>Ваш Email: </td><td><input type="text" name="email" value="<?php echo $_POST['email'];?>"  size=41 /></td></tr> 
<tr> 
<td valign=top>Сообщение*: </td><td><textarea name="message" cols="35" rows="7"><?php echo $_POST['message'];?></textarea></td> 
</tr> 
<tr> 
<td>&nbsp;</td><td><input type="submit" value="Добавить" /></td> 
</tr> 
</table> 
</form> 
</body> 
</html>

При всем при этом её можно поместить в шаблон, где ей и место. Там верстальщик может спокойно работать с ней без оглядки на синтаксис фреймворка.

То, что этот код прозрачнее и проще, чем с фреймворком вызывает сомнения?

Или его управляемость может вызывает затруднения? Предельно просто - данные, условие проверки, текст ошибки. Школьник разберется.

Бенчмарки стоит делать? По моему очевидно - это на много быстрее.

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

Делайте выводы. :)

Класс, если интересно, примерно такой:
<?php

class ValidData
{

    public 
$error = array();
    
    public function  
checkData($data$condition$error 'error')
    {
        switch(
$condition)
        {
            case 
'empty':
                if(
trim($data) == '')
                    
$this->error[] = $error
            break;
                            
            case 
'email':
                if(!
filter_var($dataFILTER_VALIDATE_EMAIL))    
                    
$this->error[] = $error;
            break;
                                                    
            case 
'url':    
                if(
filter_var($dataFILTER_VALIDATE_URL))
                     
$this->error[] = $error;
            break;
                                                                    
                                                    
            
// И так далее                    

        
}    
    }
    
    public function  
getError()
    {
        if(
count($this->error))
            return 
implode("\n"$this->error);
        else
            return 
'';
            
    }        
}

  Ответить  
 
 автор: Commander   (26.09.2010 в 14:20)   письмо автору
 
   для: Николай2357   (23.09.2010 в 15:39)
 

Посоветуйте это cheops'у, а не мне. Softtime Framework не я придумал. Лично я сейчас все проверяю вручную. С другой стороны, если мне потребуется быстро написать длинную форму, использовать буду Softtime Framework, поскольку там все в одном флаконе - и создание формы с разметкой (Вы пробовали выводить форму без таблицы?) и проверка заполненности полей. Если форма содержит десятка два полей, код скрипта получается раза в три короче, чем на чистом PHP/HTML

  Ответить  
 
 автор: Николай2357   (26.09.2010 в 19:48)   письмо автору
 
   для: Commander   (26.09.2010 в 14:20)
 

cheops сделал этот фреймворк от чистого сердца. И если Вам он нравится - значит это круто.
Я ни в коей мере не умоляю достоинств этого приложения.
Я просто хотел разобраться - чем это лучше.

А пока не вижу ничего определенного. Инсенуации плана "круто, на большом проекте нельзя иначе, два десятка полей и так далее" никак не вносят ясности.

Я могу написать гораздо больше букв против.

Примеры практические где?

  Ответить  
 
 автор: Commander   (26.09.2010 в 20:02)   письмо автору
 
   для: Николай2357   (26.09.2010 в 19:48)
 

http://www.softtime.ru/forum/update.php?id_forum=1

Здесь уж точно Softtime Framework использован. У меня нет примера, который был бы доступен кому-либо, кроме администраторов сайтов, которые я писал. На пользовательской стороне чаще всего требуются короткие формы, в которых преимущества Softtime Framework сходят на нет.

А пока не вижу ничего определенного. Инсенуации плана "круто, на большом проекте нельзя иначе, два десятка полей и так далее" никак не вносят ясности.

Разве я говорил, что "нельзя иначе"? Я просто сказал, что так будет намного проще.

  Ответить  
 
 автор: Николай2357   (26.09.2010 в 20:21)   письмо автору
 
   для: Commander   (26.09.2010 в 20:02)
 

Я просто сказал, что так будет намного проще.
Именно это очень спорный вопрос. Где и как он использован, не решает проблему. Я могу стопицот ссылок дать, где его нет.


Чем проще то?

  Ответить  
 
 автор: Commander   (27.09.2010 в 02:56)   письмо автору
 
   для: Николай2357   (26.09.2010 в 20:21)
 

Скачайте дему, увидите.

  Ответить  
 
 автор: deimand   (26.09.2010 в 19:59)   письмо автору
 
   для: Commander   (26.09.2010 в 14:20)
 

а что вы будете делать, если форма должна отправляться аяксом, а штук пять полей будут иметь динамическое содержимое в зависимости от выбора предыдущих полей?

  Ответить  
 
 автор: Commander   (26.09.2010 в 20:03)   письмо автору
 
   для: deimand   (26.09.2010 в 19:59)
 

Напишу на HTML.

  Ответить  
 
 автор: deimand   (26.09.2010 в 20:29)   письмо автору
 
   для: Commander   (26.09.2010 в 20:03)
 

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

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

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

  Ответить  
 
 автор: Commander   (27.09.2010 в 02:46)   письмо автору
 
   для: deimand   (26.09.2010 в 20:29)
 

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

А с чего Вы решили, что я "до этого" использовал Softtime Framework? Года полтора назад - да, использовал. Сейчас же предпочитаю использовать PHP/HTML.

  Ответить  
 
 автор: sasha1133   (27.09.2010 в 01:57)   письмо автору
 
   для: Commander   (26.09.2010 в 14:20)
 

>создание формы с разметкой (Вы пробовали выводить форму без таблицы?)

А зачем форму помещать в таблицу? По-моему лучше подровнять элементы с помощью стилей, это намного более гибкий подход и разделяется логика от представления

  Ответить  
 
 автор: Commander   (27.09.2010 в 02:41)   письмо автору
 
   для: sasha1133   (27.09.2010 в 01:57)
 

Лично я предпочитаю табличную верстку. Так намного проще добиться кроссбраузерности.

  Ответить  
 
 автор: sasha1133   (28.09.2010 в 19:17)   письмо автору
 
   для: Commander   (27.09.2010 в 02:41)
 

на div-ах тоже не сложно, только надо doctype указывать + немного опыта.

  Ответить  
 
 автор: psychomc   (23.09.2010 в 12:24)   письмо автору
 
   для: Commander   (23.09.2010 в 03:46)
 

как я и думал. этот фреймворк полезен только для демонстрации концепций ООП, не более

  Ответить  
 
 автор: Лена   (23.09.2010 в 13:35)   письмо автору
 
   для: Noindex   (22.09.2010 в 18:14)
 

Вытянула из проекта одну форму:

<?php
//все происходит внутри метода определенного класса
       //массив, описывающий форму - все изменяющиеся сущности
         
$this->aForm = array(
            
'form_attrs' => array(
                
'name'     => 'form_add_city',
                
'action'   => '',
                
'method'   => 'post',
            ),
            
'inputs' => array(
                
//все инпуты
                
),
            ),
        );

        
bx_import ('BxTemplFormView'); // импортируем класс формы
        
$oForm = new BxTemplFormView ($this->aForm); //создали объект
        
$oForm->initChecker(); // проверка на ошибки

        
if ($oForm->isSubmittedAndValid ()) { //если форма отправлена и без ошибок
            
$iEntryId $oForm->insert ($aValsAdd); // заносим данные в базу
        //здесь другой код...
        
} else { //вывод формы
            
$oForm->getCode ();
        }

?>


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

  Ответить  
 
 автор: sim5   (23.09.2010 в 16:05)   письмо автору
 
   для: Лена   (23.09.2010 в 13:35)
 

>нужно будет в большом проекте сделать штук десять таких форм

В смысле точных копий, клонов?

  Ответить  
 
 автор: ride   (23.09.2010 в 16:26)   письмо автору
 
   для: Noindex   (22.09.2010 в 18:14)
 

Если говориит на примере форм:
1. Валидация данных. В теме уже привели примеры. Нужно добавить, что в фреймворках есть готовые валидаторы(notempty, email, digit и тд.), поэтому в элемент формы достаточно передать только строку "notempty" или даже массив валидаторов и вызвать
$form->isValid($_POST).

2. Если надо заполнить элементы формы данными, нужно писать
<?php echo isset($_POST['field_name']) ? $_POST['field_name'] : '' ?>

а можно написать
$form->populate($_POST)

и уж точно не так, как писали выше <?=echo$_POST['field_name']?>
3. Часто бывает так, что у админа и у пользователя(а ролей может быть и больше) почти одинаковая форма, отличается лишь одним полем.
Можно воспользоваться наследованием и расширить базовый класс (здесь стоить отметить, что данная возможность есть у форм Zend Framework)
Чтобы ответить на этот вопрос, надо самому попробовать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования