है, मैं मूस (और उत्प्रेरक) का उपयोग करने के लिए एक विरासत अनुप्रयोग को परिवर्तित कर रहा हूं और निम्न प्रश्न है।पर्ल मूस - जांच करें कि चर एक मूस डेटा प्रकार
मैं उपयोगकर्ता द्वारा डेटा इनपुट के मूस प्रकार का निर्धारण कैसे करूं?
निम्नलिखित में, कच्चे, उदाहरण मैं कई प्रश्न सबमिट करता हूं और अपेक्षित फॉर्म फ़ील्ड्स 'आईडी', 'नाम' और 'ईमेल' के खिलाफ डेटा को मूलभूत 'मान्य' विधि का उपयोग करके सत्यापित करता हूं।
use MooseX::Declare;
class CheckFields
{
#has '_field' => (is => 'rw', isa => 'Any');
# Fields on form and type to which they must match.
method fields()
{
return [ { name => 'id', type => 'Int' },
{ name => 'name', type => 'Str' },
{ name => 'email', type => 'Email' }
];
}
# Dummy form posted requests.
method queries()
{
return [ { 'id' => 1,
'name' => 'John Doe',
'email' => '[email protected]'
},
{ 'id' => 'John Doe',
'name' => 1,
'email' => 'john.at.doe.net'
}
];
}
method validate_fields()
{
my $fields = $self->fields();
# Loop through dummy form post requests
foreach my $query (@{ $self->queries })
{
# Validate each field in posted form.
foreach my $field (@{ $fields })
{
my $type = $field->{'type'};
my $name = $field->{'name'};
my $res = $self->validate->{ $type }($query->{ $name});
print "$name is $res\n";
}
print "\n";
}
}
# Very basic, slightly crude field validation.
method validate()
{
return { 'Int' => sub { my $val = shift; return $val =~ /^\d+$/ ? "ok" : "not ok" },
'Str' => sub { my $val = shift; return $val =~ /^[a-zA-Z\s]+$/ ?"ok" : "not ok" },
'Email' => sub { my $val = shift; return $val =~ /^(.+)\@(.+)$/ ?"ok" : "not ok" }
};
}
}
परीक्षण करने के लिए इस कोड को बस चलाने ...
#!/usr/bin/perl
use Moose;
use CheckFields;
CheckFields->new()->validate_fields();
1;
इस तरह कुछ करने के लिए यह संभव है जहां इसा 'कोई भी' ...
has '_validate_field' => (is => 'rw', isa => 'Any');
करने के लिए सेट के साथ एक चर सेटअप
... फिर निम्न प्रकार के लिए परीक्षण निम्नानुसार है?
$self->validate_field(1);
print $self->validate_field->meta->isa('Int') ? 'Int found' : 'Int not found';
$self->validate_field('ABC');
print $self->validate_field->meta->isa('Int') ? 'Int found' : 'Int not found';
अग्रिम धन्यवाद
संपादित: @bvr - जवाब देने के लिए समय निकालने के लिए धन्यवाद, मैं इतना MooseX :: पैरामीटर के आपके उपयोग :: मान्य हो सकता है अपेक्षाकृत मूस के लिए नया हूँ अच्छी तरह से अंत समाधान हो, हालांकि मैं जो कुछ भी ढूंढ रहा हूं वह काफी नहीं है। मेरा इरादा पूरी तरह से सत्यापन विफलता की रिपोर्ट करने के बजाय त्रुटि में मौजूद प्रत्येक विशिष्ट फ़ील्ड की रिपोर्ट करने में सक्षम होना है। उस अंत में मैंने सोचा कि मैं एक डिफ़ॉल्ट, मूस अनुकूल, इनपुट धारक को आईएसए 'पर सेट' पर सेट कर सकता हूं। फिर 'eval' (या कुछ ऐसे) को देखने के लिए कि डेटा किसी विशेष प्रकार (Int, Str या मेरे द्वारा परिभाषित कुछ अनुकूलित प्रकार) के अनुरूप है या नहीं।
मैं "$ self-> validate_field-> मेटा-> आईएसए ('इंट') के साथ प्राप्त करने का प्रयास कर रहा था ..." संदर्भ सी/सी ++ में एक संघ की तर्ज पर कुछ था जहां एक चर विभिन्न प्रकार के हो सकते हैं - इस उदाहरण में मैं परीक्षण करने की कोशिश कर रहा हूं कि डेटा किसी निश्चित डेटा प्रकार के अनुरूप है या नहीं।
जवाब देने के लिए समय निकालने के लिए धन्यवाद, मैं अपेक्षाकृत MooseX की तो आपके उपयोग मूस के लिए नया हूँ :: पैरामीटर :: मान्य अच्छी तरह से अंत समाधान हो सकता है, हालांकि काफी है कि मैं क्या कर रहा हूँ नहीं खोज रहे हैं – user647248
@ user647248 - यहां दो नोट्स। सबसे पहले, आप यह पता लगाने के लिए अपवाद का निरीक्षण कर सकते हैं कि कौन सा फ़ील्ड सत्यापन विफल हुआ था। दूसरा, 'MooseX :: पैराम्स :: मान्य' के साथ उल्लिखित तकनीक को व्यक्तिगत रूप से मूल्यों की जांच करने के लिए आसानी से संशोधित किया जा सकता है। – bvr
+1 कस्टम प्रकारों के साथ परियोजनाओं का परीक्षण करने का अच्छा तरीका। –