Более быстрые формы HTML / PHP? - PullRequest
3 голосов
/ 26 июня 2010

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

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

<?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 display

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

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

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

Ответы [ 3 ]

2 голосов
/ 26 июня 2010

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

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

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

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

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

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

2 голосов
/ 26 июня 2010

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

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

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

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

Надеюсь, это поможет

Люк

2 голосов
/ 26 июня 2010

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...