cutelyst 3.9.1
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;
17
55
56bool RenderView::init(Cutelyst::Application *application, const QVariantHash &args)
57{
58 Q_D(RenderView);
59
60 const auto attributes = args.value(QLatin1String("attributes")).value<ParamsMultiMap>();
61 qDebug() << "render view" << attributes;
62 d->view = application->view(attributes.value(QLatin1String("View")));
63
64 return Action::init(application, args);
65}
66
68{
69 Q_D(const RenderView);
70
71 if (!Action::doExecute(c)) {
72 return false;
73 }
74
75 Response *res = c->res();
76 if (res->contentType().isEmpty()) {
77 res->setContentType(QStringLiteral("text/html; charset=utf-8"));
78 }
79
80 if (c->req()->isHead()) {
81 return true;
82 }
83
84 if (res->hasBody()) {
85 return true;
86 }
87
88 quint16 status = res->status();
89 if (status == 204 || (status >= 300 && status < 400)) {
90 return true;
91 }
92
93 View *view = c->customView();
94 if (view) {
95 // Fist check if the user set a view
96 return c->forward(view);
97 } else if (d->view) {
98 // Then try to use the action View attribute
99 return c->forward(d->view);
100 }
101
102 qCCritical(CUTELYST_RENDERVIEW) << "Could not find a view to render.";
103 res->setStatus(500);
104 return false;
105}
106
107#include "moc_renderview.cpp"
virtual bool doExecute(Context *c) override
Definition action.cpp:136
QString className() const
Definition action.cpp:86
Action(QObject *parent=nullptr)
Definition action.cpp:12
ParamsMultiMap attributes() const noexcept
Definition action.cpp:68
The Cutelyst Application.
Definition application.h:43
View * view(const QString &name) const
virtual bool init(Application *application, const QVariantHash &args)
Definition component.cpp:57
The Cutelyst Context.
Definition context.h:39
bool forward(Component *component)
Definition context.cpp:399
Response * res() const noexcept
Definition context.cpp:102
View * customView() const noexcept
Definition context.cpp:162
virtual bool doExecute(Cutelyst::Context *c) override
RenderView(QObject *parent=nullptr)
virtual bool init(Application *application, const QVariantHash &args) override
bool isHead() const noexcept
Definition request.cpp:334
bool hasBody() const noexcept
Definition response.cpp:76
void setStatus(quint16 status) noexcept
Definition response.cpp:70
QString contentType() const
Definition response.cpp:192
quint16 status() const noexcept
Definition response.cpp:64
void setContentType(const QString &type)
Definition response.h:220
Cutelyst View abstract view component
Definition view.h:22
The Cutelyst namespace holds all public Cutelyst API.
Definition Mainpage.dox:8
QMultiMap< QString, QString > ParamsMultiMap
QObject(QObject *parent)
virtual const QMetaObject * metaObject() const const
void setObjectName(const QString &name)
QObject * parent() const const
QString fromLatin1(const char *str, int size)
bool isEmpty() const const