Schrift
[thread]413[/thread]

CGI::Application: run_modes



<< |< 1 2 3 >| >> 29 Einträge, 3 Seiten
esskar
 2005-01-22 03:40
#4191 #4191
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hi.

kennt jmd von euch CGI::Application ?
ich hab das so meine probleme mit den run_modes

folgende dinge:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package MyApp::Login::Form;

sub new
{
  ...
}

...

1;

package MyApp;

use base 'CGI::Application';

sub setup
{
  my $self = shift;

  $self->header_props(
     -type   => 'text/html',
     -charset   => 'utf-8',
  );

  $self->mode_param('action');
  $self->start_mode('login::form');
  $self->run_modes(
     'login::form' => ? ? ?,
  );
}
1;


ich will MyApp::Login nicht mit use einbinden, da ich min. 100 module, die ich nicht alle auf einmal laden will; sondern nur wenn sie wirklich gebraucht werden... also wäre ein require an geeigneter stelle gewünscht...
kann ich aus MyApp::Login::Form auch ne CGI::Applikation machen? (mit header_type( 'none' ) müsste ich ja den http-header für dieses run auschalten können, oder? ) oder ist das ungeschickt? und wenn es geschickt ist, wie bring ich run_modes zu laden; so ( fällt mir grad ein ) :
Code: (dl )
1
2
3
$self->run_modes(
     'login::form' => sub { require MyApp::Login::Form; MyApp::Login::Form->new()->run() }
  );

vielleicht ? ( ist aber unschön! )

vielleicht ist CGI::Application aber auch nicht toll dafür und es gibt besseres!\n\n

<!--EDIT|esskar|1106358105-->
Strat
 2005-01-22 10:52
#4192 #4192
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich finde CGI::Application auch nicht so toll... ich baue mir meistens selbst einen groesseren config-hash, der alles steuert, und den ich dann mit dem html-parameter action anspreche, z.B.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package XYZ::Config;
use warnings; use strict;
use vars qw(%Config);
%Config = (
  start => { 
    action => \&XYZ::Action::Start,
    template => 'start.tmpl',
  },
  list => {
    action => \&XYZ::Action::List,
    template => 'list.tmpl',
  },
# ...
);

und dann im hauptprogramm z.B.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /usr/bin/perl
use warnings; 
use strict;
use CGI; 
use CGI::Carp qw(fatalsToBrowser warningsToBroser);

my $cgi = CGI->new();

my $action = $cgi->param('action') || 'start';
if (exists $XYZ::Config::Config{$action} and
    ref($XYZ::Config::Config{$action}->{action}) ) {
  $XYZ::Config::Config{$action}->{action}->($cgi, $action, ...);
} # if
else { # fallback
  $XYZ::Config::Config{'start'}->{action}->($cgi, 'start', ...);
} # else

oder so aehnlich

sowas in der art habe ich auch fuer das pboard verwendet\n\n

<!--EDIT|Strat|1106384060-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
esskar
 2005-01-22 15:07
#4193 #4193
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
genauso mach ich es momentan auch.... :)
pktm
 2005-01-22 16:08
#4194 #4194
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Deine Idee würde gehen.
Du kannst auch ein "Unter-Modul" für deine Applikation machen, welches du dann einbindest (auch mit require).
Wenn du das auch mit CGI::App erstellst kannst du mit header_props() einstellen, ob oder ob nichts gesendet werden soll.
Module kannst du eventuell nach Bedarf auch in cgiapp_prerun() laden.

Ich persönlich finde das Modul wirklich klasse und nutze es für mein CMS:
http://cms.berlios.de

Guck doch mal in den Code rein.
Er ist zwar noch nicht so aufgeräumt, aber für das, was du machen möchtest müssten beispiele drinne sein.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
sri
 2005-01-23 03:01
#4195 #4195
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielleicht gefaellt dir ja mein Catalyst.
Es ist zwar noch Beta aber bereits feature komplett und sehr stabil.

Catalyst basiert auf Maypole und ist daher besonders geeignet wenn du Class::DBI und TT2 benutzen willst....

Hier mal ein Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package MyApp;

use Catalyst;

MyApp->action(
_end => sub {
my ( $self, $c ) = @_;
$c->forward('MyApp::View::TT') unless $c->response->output;
},
'index.html' => sub {
my ( $self, $c ) = @_;
$c->stash->{template} = 'index.tt';
},
'hello.html' => sub {
my ( $self, $c ) = @_;
$c->response->output('Hello Catalyst');
},
'/^product[_]*(\d*).html$/' => sub {
my ( $self, $c ) = @_;
$c->stash->{template} = 'product.tt';
$c->stash->{product} = $c->req->snippets->[0];
}
);

1;


Zum testen gibts sogar ein Kommandozeilen frontend:
Code: (dl )
perl -MCatalyst::Test=MyApp -e1 product_23.html
esskar
 2005-01-23 16:20
#4196 #4196
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
@sri:
das ganze ist keine DB Anwendung...
TT2 sagt mir jetzt nix...
Empfiehlst du mir trotzdem noch drüber zu schauen?
renee
 2005-01-23 19:03
#4197 #4197
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
TT2 ist Template-Toolkit2 (http://www.template-toolkit.org/ )
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sri
 2005-01-23 20:42
#4198 #4198
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=esskar,23.01.2005, 15:20]Empfiehlst du mir trotzdem noch drüber zu schauen?[/quote]
Auf jeden Fall, TT2 und CDBI sind komplett optional...
esskar
 2005-01-23 22:12
#4199 #4199
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wo find ich denn dieses UNIVERSAL::require ?
da http://www.cpan.org/modules/by-module/UNIVERSAL/ z.b. nicht und search ist grad down
esskar
 2005-01-23 22:50
#4200 #4200
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
aha... es ist bei UNIVERSAL::exports dabei
<< |< 1 2 3 >| >> 29 Einträge, 3 Seiten



View all threads created 2005-01-22 03:40.