2010-06-26 5 views
3

Я работаю над проектом в тот момент, который требует много форм. Я думал об обходном пути, чтобы свести к минимуму расходы на время. Прежде всего, я не хочу использовать фреймворк, чтобы сделать это для меня, я все еще учусь так, что важно для меня понять суть.Quicker Forms html/php?

Ok поэтому у меня есть класс с именем формы строитель, которая выглядит следующим образом:

<?php 

class formBuilder extends systemCore{ 

    public $token, $method=array(); 

    public function __construct(){ 
     parent::__construct(); 
    } 

    public function getFormMethod(&$method, $pop, $filter){//($_POST, true, filterStr) 
     if($pop == true): 
     array_pop($method); 
     endif; 

     foreach($method as $f => $v){ 
      if(is_array($v)){ 
       $v = implode(',', $v); 
      } 
      $this->method[$f] = $filter($v); 
     } 
     return $this->method; 

    } 


    public function generateToken(){ 
    return $this->token = mt_rand(1, 10000).md5(); 
    } 

    public function inputField($label, $type, $id, $name, $value, $title, $css, $required){ 

     $required = ($required == true) ? trim('<span color="red">&lowast</span>') : ''; 

     // i know this seems a little redundant 

     $label = (is_null($label)) ? '' : trim(htmlspecialchars($label, ENT_QUOTES)); 
     $type = (is_null($type)) ? 'text' : trim(htmlspecialchars($type, ENT_QUOTES)); 
     $id = (is_null($id)) ? '' : trim(htmlspecialchars($id, ENT_QUOTES)); 
     $name = (is_null($name)) ? '' : trim(htmlspecialchars($name, ENT_QUOTES)); 
     $value = (is_null($value)) ? '' : trim(htmlspecialchars($value, ENT_QUOTES)); 
     $title = (is_null($title)) ? '' : trim(htmlspecialchars($title, ENT_QUOTES)); 
     $css = (is_null($css)) ? '' : trim(htmlspecialchars($css, ENT_QUOTES)); 

     echo(' 
     <label for="'.$name.'">'.$label.'</label><br /> 
     <input type="'.$type.'" id="'.$id.'" name="'.$name.'" value="'.$value.'" title="'.$title.'" class="'.$css.'">'.$required.'<br /> 
     '); 
    } 

    //.................and so on 

} // end class formBuilder 

?> 

Что вы думаете, ребята? Должен ли я просто придерживаться нормального, и т.д. HTML дисплей

$form = new formbuilder(); 
$form->inputField('name', 'text', 'name', 'name', 'my value', 'my title', null, true); 

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

Я просто хочу получить другие мнения по этому поводу, приветствует ребят.

ответ

2

Я понимаю, что не хочу использовать фреймворк. Будучи разработчиком PHP-разработчиков, я избегал их много лет. Однако, после отбора Ruby on Rails, я понял их силу в таких проектах, как ваши - приложения с тяжелыми формами/данными. Мой опыт связан с PHP, хотя, поэтому я взглянул на Cake.

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

Реальная власть возникает, когда этот класс также может управлять проверкой формы, сохранением, редактированием и т. Д. Или когда он может автоматически создавать форму из модели данных (схема SQL, массив конфигурации).

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

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

Настоящие фреймворки, библиотеки, генераторы и т. Д. Являются балансом соглашения и кода. Я бы посмотрел на CakePHP. Если ничего другого, прочитайте/просмотрите их Form Helper, чтобы служить в качестве ссылки для создания собственных. Посмотрите, что все это нужно, затем решите, нужно ли вам это, или вам просто нужно что-то, чтобы сгенерировать ваши формы (что у вас сейчас не за горами).

+0

Спасибо за ваше Быстродействие, Я планирую на использование базы в будущем, возможно, «CodeIgnitor». Про, я взял на борт, где те, которые вы предлагаете (SQL Schema, build arrays). Я принимаю вашу точку зрения о повторном использовании, но пока я продолжаю проверять отдельно, я должен быть в порядке. – Philip

+0

Вы можете поместить некоторые основные валидации в свой класс и все еще держать его повторно используемым. Опять же, проверьте CakePHP на эти вещи. В частности, мне нравится, как они передают конфигурационные массивы, а не длинные списки параметров. Кроме того, их простые правила проверки - notempty, alphanum, email, url и т. Д. Являются довольно стандартными. Я посмотрел на CodeIgnitor, но чувствовал, что это больше набор библиотек, чем структура. Посмотрите, как это вас примет, а затем принять решение. Вы можете обнаружить, что вы, естественно, кодируете одну из этих фреймворков. –

+0

Мне нравится ощущение «codeIgnitor» +, он может использовать некоторые из файлов zend lib, которые для меня важны +. Я где-то размещал, что некоторые из валидации могут быть повторно использованы, такие как «email» и «password» – Philip

2

Хотя нет ничего плохого в том, чтобы изобретать колесо ради обучения, просто имейте в виду тот факт, что вы заново изобретаете колесо здесь. :)

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

Возможно, вам захочется создать один класс для типа элемента формы. Используйте базовый класс Abstract для предоставления общих имен методов и методов утилиты.

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

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

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

+0

Спасибо за ваш ответ, Функция inputField, которую я использую только для «text/password». выберите, кнопка, флажок, будут иметь уникальные функции, которые уже были написаны. Я принял во внимание уникальные элементы для каждого из них, такие как «readonly/size/rows/cols/options» и т. Д. Что касается проверки, я бы, возможно, сделал это в своем классе, это то, где пункт @ Джейсона вступает в силу, т. Е. Он не будет повторно использоваться. Хорошо, я мог бы запустить preg_match для «email» и «password» и повторно использовать эти два элемента формы. – Philip

+0

Чтобы отобразить любую ошибку, я бы использовал всплывающее решение с помощью этой темы http://stackoverflow.com/questions/2870340/jquery-background-overlay-alert-without-onclick-event-php-responder ... и просто свяжите его в классе systemCore как функцию viewer() с разными параметрами для (ok/notok). – Philip

2

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

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

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

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

Надеется, что это помогает

Луки

+0

благодарит за ваш ответ, Ill deffo заглянуть в эту библиотеку «Phorms». Я согласен с тем, что я только изобретаю колесо для обучения, возможно, однажды смогу изобрести колесо :) – Philip

+0

Приятно слышать Филипп, давайте обновим, что вы решите в конце, и ссылку на колесо, если это хорошо :) – Luke