SHARE
TWEET

Untitled

a guest Aug 4th, 2017 113 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diff --git a/lib/Habr.pm b/lib/Habr.pm
  2. index c19efa9..dd8289f 100644
  3. --- a/lib/Habr.pm
  4. +++ b/lib/Habr.pm
  5. @@ -1,5 +1,6 @@
  6.  package Habr;
  7.  use Mojo::Base 'Mojolicious';
  8. +use utf8;
  9.  
  10.  # This method will run once at server start
  11.  sub startup {
  12. @@ -11,8 +12,70 @@ sub startup {
  13.      # Routes
  14.      my $r = $self->routes;
  15.  
  16. -    # Normal route to controller
  17. +    # Нормальная маршрутизация к контроллеру
  18.      $r->route('/welcome')->to('example#welcome');
  19. +
  20. +    # Или в формате хеша
  21. +    $r->route('/welcome')->to(controller => 'example', action => 'welcome');
  22. +
  23. +    # Также можно сразу положить что-нибудь в stash (тайник, заначка)
  24. +    $r->route('/welcome')->to(controller => 'example', action => 'welcome', username => 'Mikhail');
  25. +
  26. +    # Или в более компактной форме
  27. +    $r->route('/welcome')->to('example#welcome', username => 'Mikhail');
  28. +
  29. +    # Можно сделать заглушку и определить значение по умолчанию. Также username поместится в stash
  30. +    # /welcome       -> {username => 'Mikhail'}
  31. +    # /welcome/      -> {username => 'Mikhail'}
  32. +    # /welcome/Boris -> {username => 'Boris'}
  33. +    $r->route('/welcome/:username')->to('example#welcome', username => 'Mikhail');
  34. +
  35. +    # К заглушке можно применить регулярные выражения
  36. +    $r->route('/page:number', number => qr/\d+/)->to('news#show');
  37. +
  38. +    # Разные контроллеры для get и post-запросов
  39. +    $r->route('/welcome')->via('get')->to('example#get');
  40. +    $r->route('/welcome')->via('post')->to('example#post');
  41. +
  42. +    # CallBack предназначен для выполнения кода в обход контроллера
  43. +    $r->route('/say/:message')->to( cb => sub {
  44. +       my $self = shift;
  45. +       $self->render( text => $self->stash('message') );
  46. +    }, message => 'Mojolicious rocks!' );
  47. +
  48. +    # Можно сделать вложенные маршруты, чтобы убрать повторяющийся код
  49. +    my $welcome = $r->route('/welcome')->to(controller => 'welcome');
  50. +    $welcome->route('/Mikhail')->to(action => 'mikhail');
  51. +    $welcome->route('/Boris')->to(action => 'boris');
  52. +
  53. +    # Bridges также позволяет построить вложенные маршруты
  54. +    # Но чтобы пройти по марштуру, bridge должен вернуть истину
  55. +    # Это очень удобное средство для аутентификации
  56. +    my $user = $r->bridge('/user')->to(cb => sub {
  57. +       my $self = shift;
  58. +
  59. +       # Authenticated
  60. +       return 1 if $self->req->headers->header('X-Bender');
  61. +
  62. +       # Not authenticated
  63. +       return;
  64. +    });
  65. +    $user->route('/mail')->to(action => 'mail');
  66. +
  67. +    # Не забывайте веселиться
  68. +
  69. +    # Кириллические ЧПУ не проблема!
  70. +    $r->route('/мультсериалы/зарубежные/футурама')->to( cb => sub {
  71. +       my $self = shift;
  72. +       $self->render( text => 'Футурама' );
  73. +    });
  74. +
  75. +    # Можно даже так!
  76. +    $r->route('/☃')->to( cb => sub {
  77. +       my $self = shift;
  78. +       $self->render( text => '☃ — unicode snowman' );
  79. +    });
  80. +
  81.  }
  82. </pre></font></code></blockquote>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top