cutelyst 5.0.0
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
renderview.cpp
1/*
2 * SPDX-FileCopyrightText: (C) 2014-2022 Daniel Nicoletti <dantti12@gmail.com>
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5#include "application.h"
6#include "componentfactory.h"
7#include "context.h"
8#include "renderview_p.h"
9#include "response.h"
10#include "view.h"
11
12#include <QtCore/QLoggingCategory>
13
14Q_LOGGING_CATEGORY(CUTELYST_RENDERVIEW, "cutelyst.renderview", QtWarningMsg)
15
16using namespace Cutelyst;
17using namespace Qt::Literals::StringLiterals;
18
60 : Action(new RenderViewPrivate, parent)
61{
63}
64
65bool RenderView::init(Cutelyst::Application *application, const QVariantHash &args)
66{
67 Q_D(RenderView);
68
69 const auto attributes = args.value(u"attributes"_s).value<ParamsMultiMap>();
70 d->view = application->view(attributes.value(u"View"_s));
71
72 return Action::init(application, args);
73}
74
76{
77 Q_D(const RenderView);
78
79 if (!Action::doExecute(c)) {
80 return false;
81 }
82
83 Response *res = c->res();
84 if (res->contentType().isEmpty()) {
85 res->setContentType("text/html; charset=utf-8"_ba);
86 }
87
88 if (c->req()->isHead()) {
89 return true;
90 }
91
92 if (res->hasBody()) {
93 return true;
94 }
95
96 quint16 status = res->status();
97 if (status == 204 || (status >= 300 && status < 400)) {
98 return true;
99 }
100
101 View *view = c->customView();
102 if (view) {
103 // Fist check if the user set a view
104 return c->forward(view);
105 } else if (d->view) {
106 // Then try to use the action View attribute
107 return c->forward(d->view);
108 }
109
110 qCCritical(CUTELYST_RENDERVIEW) << "Could not find a view to render.";
111 res->setStatus(500);
112 return false;
113}
114
115#include "moc_renderview.cpp"
This class represents a Cutelyst Action.
Definition action.h:35
bool doExecute(Context *c) override
Definition action.cpp:137
QString className() const noexcept
Definition action.cpp:87
ParamsMultiMap attributes() const noexcept
Definition action.cpp:69
The Cutelyst application.
Definition application.h:66
View * view(QStringView name={}) const
virtual bool init(Application *application, const QVariantHash &args)
Definition component.cpp:57
The Cutelyst Context.
Definition context.h:42
bool forward(Component *component)
Definition context.cpp:394
Response * res() const noexcept
Definition context.cpp:104
Request * req
Definition context.h:66
View * customView() const noexcept
Definition context.cpp:164
Sensible default end action that forwards to a View.
Definition renderview.h:15
bool doExecute(Cutelyst::Context *c) override
RenderView(QObject *parent=nullptr)
bool init(Application *application, const QVariantHash &args) override
bool isHead() const noexcept
Definition request.cpp:337
A Cutelyst response.
Definition response.h:29
void setContentType(const QByteArray &type)
Definition response.h:230
bool hasBody() const noexcept
Definition response.cpp:80
void setStatus(quint16 status) noexcept
Definition response.cpp:74
quint16 status() const noexcept
Definition response.cpp:68
QByteArray contentType() const
Definition response.cpp:178
Abstract View component for Cutelyst.
Definition view.h:25
The Cutelyst namespace holds all public Cutelyst API.
bool isEmpty() const const
T value(const Key &key, const T &defaultValue) const const
virtual const QMetaObject * metaObject() const const
void setObjectName(QAnyStringView name)
QString fromLatin1(QByteArrayView str)