|
|
|
| привет. начал изучать фрэймворки по книги PHP практика создания приложений (2изд)
и не понимаю для чего они нужны и КАК они ускоряют разработку приложений???
вот например класс field_text - что он делает? проверяет данные при отправке или создаёт элемент на странице? зачем в нём вобще какие-то стили, веть это уже HTML/CSS а не php?
обьясните пожалуста!!! | |
|
|
|
|
|
|
|
для: Noindex
(22.09.2010 в 18:14)
| | сугубо моё мнение.
лучше используйте этот фреймворк просто для изучения принципов ООП. т.к основная идея, как я понял авторов, именно это. в основе ускорение создания веб-приложений за счет быстрой генерации форм и т.п.
но по-моему шаблонизация и отделение мух от котлет намного правильнее и актуальнее сейчас...
опять же имхо...каждому своё | |
|
|
|
|
|
|
|
для: psychomc
(22.09.2010 в 18:25)
| | ну всёже как фреймворк ускоряит работу? (например класс для текстового поля)? мне что вместо
echo '<input type=text>'
писать класс чтоль я никак не понимаю их предназначение.
может у кого есть очень хорошая и подробная статья на эту тему? | |
|
|
|
|
|
|
|
для: Noindex
(22.09.2010 в 18:38)
| | Когда надо будет сделать более ли менее крупный проект, то ты запутаешься там в своих echo '<input type=text>' | |
|
|
|
|
|
|
|
для: nikita2206
(22.09.2010 в 18:46)
| | а в куче производных классах не запутаюсь? | |
|
|
|
|
|
|
|
для: Noindex
(22.09.2010 в 18:55)
| | нет | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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->value, ENT_QUOTES)."\"
$size $maxlength>\n";
// Если поле обязательно, помечаем этот факт
if($this->is_required) $this->caption .= " *";
// Формируем подсказку, если она имеется
$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>' чем буду встраивать этот класс
но вопрос всёже не в этом
меня интересует предназначение этого класса! что он делает? и формирует текстовое поле и проверяет его и всё на свете чтоль? | |
|
|
|
|
|
|
|
для: Noindex
(22.09.2010 в 19:08)
| | Это не проще, где я такое сказал? Проще шаблоном воспользоваться. Но при валидации введенных данных подобный класс должен сильно упростить работу программисту. Только я не знаю что это за класс, и утверждать про него конкретно не хочу.
Для ознакомления с фреймворками советую выбрать какой-нибудь фрейморк, а не эти три класса. | |
|
|
|
|
|
|
|
для: Noindex
(22.09.2010 в 19:08)
| | я уже написал psychomc (22.09.2010 в 18:25) для чего его лучше использовать | |
|
|
|
|
|
|
|
для: 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> </td><td><input type="submit" value="Добавить" /></td>
</tr>
</table>
</form>
</body>
</html>
|
Сравните, а затем представьте, что надо сделать форму добавления квартиры в каталог недвижимости. Что будет легче? | |
|
|
|
|
|
|
|
для: Commander
(23.09.2010 в 03:46)
| | Второй естественно. | |
|
|
|
|
|
|
|
для: Николай2357
(23.09.2010 в 07:02)
| | Я имею в виду - легче написать | |
|
|
|
|
|
|
|
для: Commander
(23.09.2010 в 07:55)
| | Дык и я о том же. Если уж приводить пример, то корректный...
Вот теперь попробуйте тоже самое, что во втором примере, написать с помощью фреймворка.
С разметкой, с передачей параметров. Тогда и сравним, что легче. | |
|
|
|
|
|
|
|
для: Николай2357
(23.09.2010 в 08:09)
| | Выдача в обоих примерах практически одинаковая. Применение фреймворка снижает гибкость - с этим не спорю. Зато большие формы писать на порядок легче становится.
С разметкой...
А с чего Вы решили, что в первом примере ни разметки, ни передачи параметров не будет? | |
|
|
|
|
|
|
|
для: Commander
(23.09.2010 в 10:02)
| | В первом примере только форма. Во вторм - таблица.
По этому первый смотрится меньше. На самом деле первый написать, а тем более разобраться в нем, сложнее.
И потом, во втором валидация вынута в файл. Можно точно так же оформить функцией и объем кода еще уменьшится.
Вопрос это крайне спорный, от того и холивары. Обычно примеров не приводят - фреймворк лучше и всё.
Вот раз есть пример, хотелось бы досконально понять чем. | |
|
|
|
|
|
|
|
для: Николай2357
(23.09.2010 в 10:39)
| |
<form name=form method=post><table><tr>
<td width=150
valign=top>Ваше имя *:</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>Текст сообщения *:</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>
|
Вот код, который выдает первый пример | |
|
|
|
|
|
|
|
для: Commander
(23.09.2010 в 11:23)
| | Опа. Даже так... А если у меня другая верстка?
Я имел ввиду по отдельности. | |
|
|
|
|
|
|
|
для: Николай2357
(23.09.2010 в 11:41)
| | Я почему и говорю, что гибкость падает. Но это плата за простоту разработки. | |
|
|
|
|
|
|
|
для: 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> </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($data, FILTER_VALIDATE_EMAIL))
$this->error[] = $error;
break;
case 'url':
if(filter_var($data, FILTER_VALIDATE_URL))
$this->error[] = $error;
break;
// И так далее
}
}
public function getError()
{
if(count($this->error))
return implode("\n", $this->error);
else
return '';
}
}
|
| |
|
|
|
|
|
|
|
для: Николай2357
(23.09.2010 в 15:39)
| | Посоветуйте это cheops'у, а не мне. Softtime Framework не я придумал. Лично я сейчас все проверяю вручную. С другой стороны, если мне потребуется быстро написать длинную форму, использовать буду Softtime Framework, поскольку там все в одном флаконе - и создание формы с разметкой (Вы пробовали выводить форму без таблицы?) и проверка заполненности полей. Если форма содержит десятка два полей, код скрипта получается раза в три короче, чем на чистом PHP/HTML | |
|
|
|
|
|
|
|
для: Commander
(26.09.2010 в 14:20)
| | cheops сделал этот фреймворк от чистого сердца. И если Вам он нравится - значит это круто.
Я ни в коей мере не умоляю достоинств этого приложения.
Я просто хотел разобраться - чем это лучше.
А пока не вижу ничего определенного. Инсенуации плана "круто, на большом проекте нельзя иначе, два десятка полей и так далее" никак не вносят ясности.
Я могу написать гораздо больше букв против.
Примеры практические где? | |
|
|
|
|
|
|
|
для: Николай2357
(26.09.2010 в 19:48)
| | http://www.softtime.ru/forum/update.php?id_forum=1
Здесь уж точно Softtime Framework использован. У меня нет примера, который был бы доступен кому-либо, кроме администраторов сайтов, которые я писал. На пользовательской стороне чаще всего требуются короткие формы, в которых преимущества Softtime Framework сходят на нет.
А пока не вижу ничего определенного. Инсенуации плана "круто, на большом проекте нельзя иначе, два десятка полей и так далее" никак не вносят ясности.
Разве я говорил, что "нельзя иначе"? Я просто сказал, что так будет намного проще. | |
|
|
|
|
|
|
|
для: Commander
(26.09.2010 в 20:02)
| | Я просто сказал, что так будет намного проще.
Именно это очень спорный вопрос. Где и как он использован, не решает проблему. Я могу стопицот ссылок дать, где его нет.
Чем проще то? | |
|
|
|
|
|
|
|
для: Николай2357
(26.09.2010 в 20:21)
| | Скачайте дему, увидите. | |
|
|
|
|
|
|
|
для: Commander
(26.09.2010 в 14:20)
| | а что вы будете делать, если форма должна отправляться аяксом, а штук пять полей будут иметь динамическое содержимое в зависимости от выбора предыдущих полей? | |
|
|
|
|
|
|
|
для: deimand
(26.09.2010 в 19:59)
| | Напишу на HTML. | |
|
|
|
|
|
|
|
для: Commander
(26.09.2010 в 20:03)
| | ну вот, малейшая сложность и все что делалось и применялось до этого становится непригодным для дальнейших разработок...
человек разбирающийся в ооп должен быстренько подправить класс, либо метод, либо просто дописать еще метод и продолжать использовать свои наработки как ни в чем не бывало. к тому же в книге написано, что не нужно упираться именно в этот класс. это всего лишь макет, образец, который показывает приемы ооп на примерах а не в теории, и который(ну или свой) постоянно должен модернизироваться до тех пор, пока не будет подходить к любой ситуации.
а какой смысл брать пример, да еще и сырой, и подстраиваться под него? это как в пословице про Магомеда получается, если класс не подходит под проект, значит проект нужно подстраивать под класс... | |
|
|
|
|
|
|
|
для: deimand
(26.09.2010 в 20:29)
| | ну вот, малейшая сложность и все что делалось и применялось до этого становится непригодным для дальнейших разработок...
А с чего Вы решили, что я "до этого" использовал Softtime Framework? Года полтора назад - да, использовал. Сейчас же предпочитаю использовать PHP/HTML. | |
|
|
|
|
|
|
|
для: Commander
(26.09.2010 в 14:20)
| | >создание формы с разметкой (Вы пробовали выводить форму без таблицы?)
А зачем форму помещать в таблицу? По-моему лучше подровнять элементы с помощью стилей, это намного более гибкий подход и разделяется логика от представления | |
|
|
|
|
|
|
|
для: sasha1133
(27.09.2010 в 01:57)
| | Лично я предпочитаю табличную верстку. Так намного проще добиться кроссбраузерности. | |
|
|
|
|
|
|
|
для: Commander
(27.09.2010 в 02:41)
| | на div-ах тоже не сложно, только надо doctype указывать + немного опыта. | |
|
|
|
|
|
|
|
для: Commander
(23.09.2010 в 03:46)
| | как я и думал. этот фреймворк полезен только для демонстрации концепций ООП, не более | |
|
|
|
|
|
|
|
для: 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 ();
}
?>
|
Быстро, легко и красиво. Смысл в чем. На этапе проектирования классов и связей между ними - это может показаться долго, но после, когда вам нужно будет в большом проекте сделать штук десять таких форм, это будет удобно. | |
|
|
|
|
|
|
|
для: Лена
(23.09.2010 в 13:35)
| | >нужно будет в большом проекте сделать штук десять таких форм
В смысле точных копий, клонов? | |
|
|
|
|
|
|
|
для: Noindex
(22.09.2010 в 18:14)
| | Если говориит на примере форм:
1. Валидация данных. В теме уже привели примеры. Нужно добавить, что в фреймворках есть готовые валидаторы(notempty, email, digit и тд.), поэтому в элемент формы достаточно передать только строку "notempty" или даже массив валидаторов и вызвать
2. Если надо заполнить элементы формы данными, нужно писать
<?php echo isset($_POST['field_name']) ? $_POST['field_name'] : '' ?>
|
а можно написать
и уж точно не так, как писали выше <?=echo$_POST['field_name']?>
3. Часто бывает так, что у админа и у пользователя(а ролей может быть и больше) почти одинаковая форма, отличается лишь одним полем.
Можно воспользоваться наследованием и расширить базовый класс (здесь стоить отметить, что данная возможность есть у форм Zend Framework)
Чтобы ответить на этот вопрос, надо самому попробовать. | |
|
|
|