2012-02-29 32 views
5

क्या किसी ने सफलतापूर्वक डेटाबेस तालिका से स्वयं-सत्यापन वेबफॉर्म बनाने के लिए DBIx::Class::WebForm या CatalystX-CRUD जैसे कुछ सफलतापूर्वक उपयोग किया है?एक वैध सीआरयूडी वेबफॉर्म उत्पन्न करने के लिए मुझे किस पर्ल मॉड्यूल का उपयोग करना चाहिए?

मैं एक मॉड्यूल की कल्पना कर रहा हूं जो डेटाबेस तालिका स्कीमा पढ़ता है, प्रत्येक कॉलम के लिए बाधाओं को पढ़ता है, और त्रुटि संदेशों के लिए फ़ील्ड्स के साथ वेबफॉर्म के कुछ अमूर्त प्रतिनिधित्व उत्पन्न करता है। मैं उत्प्रेरक और प्लेक का उपयोग कर रहा हूं बड़ा मौजूदा कोडबेस।

मैं एक HTML वेबफॉर्म को कोड नहीं करना चाहता, न ही कोई सत्यापन तर्क। मैं रूबी ऑन रूल्स की शैली में जितना संभव हो उतना छोटा कोड लिखना चाहता हूं। इसके लिए कौन सा पर्ल मॉड्यूल सबसे अच्छा है?

अपडेट: मैंने वेबफॉर्म पक्ष को HTML::FormFu के साथ हल किया है, लेकिन यह अभी भी डेटाबेस पर फॉर्म इनपुट मैपिंग कर रहा है, उदाहरण के लिए date_start और date_end दोनों 'बनाए गए' कॉलम से संबंधित हैं, और टिप्पणी 'LIKE% foo%', आदि का उपयोग करके मेल खाना चाहिए। 'डीबीआईसीएफयू' कहां है?

अद्यतन: यह एक वेब अनुप्रयोग के लिए है, वेबफॉर्म डेटाबेस तालिका की तरह दिखना नहीं चाहिए। मैं डेटाबेस प्रबंधन उपकरण की तलाश नहीं कर रहा हूं।

+0

यह भी संबंधित है: [उत्प्रेरक-संसाधन] (http://search.cpan.org/dist/CatalystX-Resource/) – daxim

उत्तर

2

आप HTML::FormHandler::Moose और HTML::FormHandler::Model::DBIC का उपयोग कर सकते हैं और कुछ अच्छे फॉर्म प्राप्त कर सकते हैं।

एक साधारण उदाहरण के रूप में:

प्रपत्र परिभाषा:

package MyStats::Form::Datetime ; 

use HTML::FormHandler::Moose ; 
extends 'HTML::FormHandler::Model::DBIC' ; 

use Date::Calc qw(Today_and_Now) ; 

has_field 'datetimeid' => (label  => 'ID') ; 
has_field 'datetime' => (type  => 'Text', 
          apply  => [ { transform => \&transform_dt } ] , 
          deflation => \&deflation_dt , 
          required => 1) ; 
has_field 'submit'  => (type => 'Submit' , 
          value => 'Speichern') ; 
# These are the fields of the table datetime 

sub transform_dt { 
    my ($dt) = @_ ; 

    my @d = ($dt =~ m/(\d{1,2})\.(\d{1,2})\.(\d{4})\s+(\d{1,2}):(\d{1,2})/) ; 
    return sprintf('%04d-%02d-%02d %02d:%02d:00' , @d[2,1,0,3,4]) ; 
} 

sub deflation_dt { 
    my ($dt) = @_ ; 

    my @d = ($dt =~ m/(\d{4})-(\d{2})-(\d{2})\s+(\d{1,2}):(\d{1,2})/) ; 
    if(! @d) { 
    @d = Today_and_Now() ; 
    } 
    return sprintf('%02d.%02d.%04d %02d:%02d:00' , @d[2,1,0,3,4]) ; 
} 

1 ; 

और एक नियंत्रक में उपयोग:

package MyStats::Controller::Datetime ; 
use Moose ; 
use namespace::autoclean ; 

BEGIN { extends 'Catalyst::Controller' ; } 

use MyStats::Form::Datetime ; 

has 'form' => (isa  => 'MyStats::Form::Datetime' , 
       is  => 'rw' , 
       lazy => 1 , 
       default => \&new_datetime_form) ; 

sub new_datetime_form { 
    MyStats::Form::Datetime->new(css_class => 'datetimeform' , 
           name => 'datetimeform') ; 
} 

... 

sub add :Local :Args(0) { 
    my ($self , $ctx) = @_ ; 

    my $data = $ctx->model('MyStatsDB::Datetime')->new_result({}) ; 
    $ctx->stash(template => 'datetime/add.tt2' , 
       form  => $self->form) ; 
    $ctx->bread_crumb({ name => 'Datum/Zeit eingeben' , 
         location => '/datetime/add' }) ; 

    $ctx->req->param('datetimeid' , undef) if $ctx->req->param('datetimeid') ; 
    return unless $self->form->process(item => $data , 
             params => $ctx->req->params) ; 
    $ctx->flash(message => 'Neuer Datensatz ' . $data->datetimeid . 
          ' angelegt.' , 
       id_add => $data->datetimeid) ; 
    $ctx->res->redirect($ctx->uri_for('/datetime')) ; 
} 

... 

__PACKAGE__->meta->make_immutable ; 

1 ; 

अच्छा काम करता है।

+0

धन्यवाद, लेकिन मुझे उम्मीद है कि {{datetimeid}} और {{डेटाटाइम निर्दिष्ट नहीं करना है) }} स्वयं, लेकिन बस इसे डेटाबेस तालिका पर इंगित करें और इसे फ़ील्ड स्वयं ही पढ़ें। और वर्चर (32) को लंबाई 32, आदि के साथ टेक्स्ट इनपुट फ़ील्ड में भी बदल दें। –

+0

@WillSheppard मुझे यकीन नहीं है कि ऐसा कुछ मौजूद है, लेकिन कोई 'HTML :: FormHandler :: Moose' फ़ाइलों को उत्पन्न करने के लिए कुछ लिख सकता है । – dgw

1

मैंने इस फैशन में मेरे लिए फॉर्म बनाने के लिए HTML::FormHandler का उपयोग किया है। इसे कुछ tweaking की जरूरत है, लेकिन यह आपके लिए 9 0% काम करता है। अलग-अलग डीबीएक्स :: कक्षा एक समान उपकरण प्रदान करती है।