> Если я Вас правильно понял, то можно все сделать например так
> $c->model('DBI::Content::Return')->return( $id );
> В DBI::Content::Return
> $keys_db->{ $content_f->{id} }->{title} = $content_f->{title};
> $c->stash->{date} = $content_f->{date};
> $c->stash->{published} = $content_f->{published};
> $c->stash->{autor} = $content_f->{autor};
> $c->stash->{content} = $content_f->{content}; Это тебя в другую сторону перекосило - не дело модели лазить в stash. Избегай излишних присваиваний. Если $c->stash не содержит ничего, кроме $content_f, смело делай $c->{stash} = $content_f. Приятный побочный эффект - что добавляешь в Model, сразу становится видимым во View.
>[оверквотинг удален]
> $c->stash->{template} = 'error_404';
> $c->response->status(404);
> Таким костылем я осуществляю проверку параметра $id.
> Но Все это тупо и не красиво.
> Хочу избавиться от return.
> Стоит ли отдать под контроль url в Root::begin?
Вопрос сложный, следующий будет - а не нужно ли переделать URL, чтобы был вид /$id/xxx/xxx и применить Chained? То есть сначала убедиться, что $id существует, а уже потом разбираться, что следует делать.
Вся проблема - артефакт Catalyst с его Chained контроллерами. В других языках решается через наследование, где предок разбирается с ID, а потомки разбираются с более детальными инструкциями.
> И еще вопрос.
> Куда писать данные(в том числе и временные системные)? чтобы они были доступны
> из любого места.
> $c->stash ?
В одном цикле запрос/ответ - всё равно. Хоть в $c->stash, хоть во $c->flash, хоть в глобальную переменную.
Неприятные вопросы появляются, когда один контроллер вызывает другой, то есть stash уже не годится, а session замусоривать не хочется. В Poet::Mason эта проблема решается принципиально по-другому, там нет нужды во всей банде go/visit/detach/Chained и неочевидной передачей параметров.
В Catalyst иногда приходится делать такое -
my @path = split /\//, $c->req->path; $path[1] = 'double';
$path[$#path-1] = $key;
$path[$#path] = $last;
$c->req->path(join('/', '',@path));
$c->dispatcher->prepare_action($c);
$c->detach($c->action, $c->req->args);
Что означает "вызвать другой контроллер, передав ему в URL вычисленные аргументы"