2013-07-23 3 views
0

У меня есть Mojolicious приложение, которое использует DBIx :: Class. Он работает нормально, но теперь я хотел бы использовать объект приложения Mojolicious в модуле схемы DBIx :: Class.Как использовать Мохолическое приложение внутри схемы класса DBIx?

В шаблоне я использую этот код для отображения ссылки:

<a href="<%= $self->url_for('playlist', name => $playlist->name) %>">...</a> 

Теперь я хотел бы перенести часть кода, который генерирует URL в модуль схемы DBIx :: Class, так что в шаблоне я мог бы это :

<a href="<%= $playlist->url %>">...</a> 

Я пытался добиться этого путем создания sub url в моей схемы :: Result :: Playlist.pm

sub url { 
    my $self = shift; 
    my ($app) = @_; 
    return $app->url_for('playlist', name => $self->name); 
} 

Это работает, но требует прохождения Mojolicious app до url (например. <%= $playlist->url($self) %>), что не приятно.

Есть ли элегантный способ обеспечить объект Mojolicious для всех модулей схемы DBIx :: Class сразу, возможно, во время запуска приложения?

Это моя инициализация схемы в моем приложении startup рутины:

my $schema = MyApp::Schema->connect(
    'dbi:mysql:dbname=myapp', 
    'xxxx', 
    'xxxx', 
    { mysql_enable_utf8 => 1, }, 
); 
$self->helper(schema => sub { $schema }); 
+0

Почему вы не используете прикрытие для передачи данных в шаблон? – stevenl

+0

'$ playlist' передается шаблонам с помощью stash –

ответ

2

модель в приложении MVC должна быть развязана, поэтому он может быть использован за пределами приложения тоже.

Контроллеры выполняют задачу по извлечению данных из модели (моделей) и передают ее на вид (ы).

Ваши шаблоны идеально подходят, не нужно ничего менять.

 Смежные вопросы

  • Нет связанных вопросов^_^