Страница 1 из 1

[perl] распределенное ООП Catalyst::DispatchType::Chained

Добавлено: 2010-03-04 13:54:54
ProFTP
нашел во фреймворке интересный вариант движка Catalyst::DispatchType::Chained

записать так

Код: Выделить всё

  sub blog : Chained PathPart('blog') CaptureArgs(0) { }


  sub user : Chained('blog') PathPart('user') CaptureArgs(1) {
      my ( $self, $c, $id_un ) = @_;
      $c->stash->{ message } = "Hello 2";
      $c->stash->{ arg_sum }->[0] = $id_un;
  }




  sub view : Chained('user') PathPart('view') CaptureArgs(1) {
      my ( $self, $c, $id ) = @_;
      $c->stash->{ message } .= "World!";
      $c->stash->{ arg_sum }->[1] = $id;

  }







  sub view_page_off : Chained('view')  PathPart('') Args(1) {
      my ( $self, $c, $page ) = @_;
      
      $c->stash->{ arg_sum }->[2] = $page;
      
   $c->forward( 'view_blog_message', [ @{$c->stash->{ arg_sum }} ] );
    
  }
  


  

  sub view_off : Chained('view') PathPart('') Args(0) {
      my ( $self, $c ) = @_;

   $c->forward( 'view_blog_message', [ @{$c->stash->{ arg_sum }} ] );
   
  }



  sub view_page_user : Chained('user') PathPart('') Args(1) {
      my ( $self, $c, $page ) = @_;

      $c->stash->{ arg_sum }->[1] = $page;
      
# print '99';
   $c->forward( 'view_blog', [ @{$c->stash->{ arg_sum }} ] );
   
  }
  


  sub view_user : Chained('user') PathPart('') Args(0) {
      my ( $self, $c ) = @_;

   $c->forward( 'view_blog', [ @{$c->stash->{ arg_sum }} ] );
   
   
  }
  


и методы будут вызыватся так, друг за другом, как роли... красиво получается

Код: Выделить всё

| Path Spec                           | Private                              |
+-------------------------------------+--------------------------------------+
| /blog/user/*/view/*                 | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | -> /blog/view (1)                    |
|                                     | => /blog/view_off                    |
| /blog/user/*/view/*/*               | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | -> /blog/view (1)                    |
|                                     | => /blog/view_page_off               |
| /blog/user/*/*                      | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | => /blog/view_page_user              |
| /blog/user/*                        | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | => /blog/view_user                   |
'-------------------------------------+--------------------------------------'

в других языках, ни в java, ни в php такого не видел...

Re: [perl] распределенное ООП Catalyst::DispatchType::Chaine

Добавлено: 2010-05-10 12:18:20
Alex Keda
и зачем это?

Re: [perl] распределенное ООП Catalyst::DispatchType::Chaine

Добавлено: 2010-05-10 12:56:12
ProFTP
если у тебя есть ~~100-400 классов большая прогрмаа, много страниц, много кода

они выполняют различные действия много разных url

тут можно поставить отрибуты

Код: Выделить всё

  sub view_user : Chained('user') PathPart('') Args(0) {
методы будут вызыватся друг за другом... (в отличая если написать mod_rewrite)
типо наследоватся, ну все можно привязывать к объекту $c->stash

как это по другому сделать?