Cutelyst  2.3.0
Public Slots | Public Member Functions | Protected Member Functions | Properties | Friends | List of all members
Cutelyst::Context Class Reference

The Cutelyst Context. More...

#include <Cutelyst/Context>

Inheritance diagram for Cutelyst::Context:
Inheritance graph
[legend]

Public Slots

void next (bool force=false)
 This method is deprecated and no longer works, creating local event loops leads to crashes. More...
 

Public Member Functions

 Context (Application *app)
 Constructs a new DUMMY Context object that is child of Application This currently is experimental to allow non network events (such as database notification) to be able to use our infrastructure.
 
Actionaction () const
 
QString actionName () const
 
Applicationapp () const
 
QVariant config (const QString &key, const QVariant &defaultValue=QVariant()) const
 
QVariantMap config () const
 
Controllercontroller () const
 
Controllercontroller (const QString &name) const
 
QString controllerName () const
 
ViewcustomView () const
 
void detach (Action *action=nullptr)
 
bool detached () const
 
Dispatcherdispatcher () const
 
Engineengine () const
 
bool error () const
 Returns true if an error was set.
 
void error (const QString &error)
 Sets an error string and try to stop.
 
QStringList errors () const
 Returns a list of errors that were defined.
 
bool execute (Component *code)
 
bool forward (Component *component)
 
bool forward (const QString &action)
 
ActiongetAction (const QString &action, const QString &ns=QString()) const
 
QVector< Action * > getActions (const QString &action, const QString &ns=QString()) const
 
QLocale locale () const
 
QString ns () const
 
template<typename T >
plugin ()
 Returns the registered plugin that casts to the template type T.
 
QVector< Plugin * > plugins () const
 
Requestreq () const
 
Requestrequest () const
 
Responseres () const
 
Responseresponse () const
 
bool setCustomView (const QString &name)
 
void setLocale (const QLocale &locale)
 
void setStash (const QString &key, const QVariant &value)
 
void setStash (const QString &key, const ParamsMultiMap &map)
 
void setState (bool state)
 Sets the state of the current executed action, setting to false will make the dispatcher skip non processed actions.
 
QStack< Component * > stack () const
 
void stash (const QVariantHash &unite)
 
QVariantHash & stash ()
 
QVariant stash (const QString &key) const
 
bool state () const
 
QString translate (const char *context, const char *sourceText, const char *disambiguation=nullptr, int n=-1) const
 
QUrl uriFor (const QString &path=QString(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
 
QUrl uriFor (const QString &path, const ParamsMultiMap &queryValues) const
 
QUrl uriFor (Action *action, const QStringList &captures=QStringList(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
 
QUrl uriFor (Action *action, const ParamsMultiMap &queryValues) const
 
QUrl uriForAction (const QString &path, const QStringList &captures=QStringList(), const QStringList &args=QStringList(), const ParamsMultiMap &queryValues=ParamsMultiMap()) const
 
QUrl uriForAction (const QString &path, const ParamsMultiMap &queryValues) const
 
Viewview (const QString &name=QString()) const
 
Q_DECL_DEPRECATED bool wait (uint count=1)
 This method is deprecated and no longer works, creating local event loops leads to crashes. More...
 

Protected Member Functions

 Context (ContextPrivate *priv)
 Constructs a new Context object using private implementation.
 

Properties

Action action
 
QString actionName
 
QVariantMap config
 
Controller controller
 
QString controllerName
 
QString namespace
 
QString ns
 
Request req
 
Request request
 
bool state
 

Friends

class Action
 
class Application
 
class DispatchType
 
class Engine
 
class Plugin
 

Detailed Description

This is the context class that glues Request and Response plus some helper methods.

Definition at line 50 of file context.h.

Member Function Documentation

◆ action()

Action* Cutelyst::Context::action ( ) const

Returns a pointer to the current action

Referenced by res(), uriFor(), and uriForAction().

◆ actionName()

QString Cutelyst::Context::actionName ( ) const

Returns the private name of the current action

Referenced by next(), and res().

◆ app()

Application * Context::app ( ) const

Returns the application instance. See Cutelyst::Application

Definition at line 104 of file context.cpp.

Referenced by Cutelyst::SessionStoreFile::deleteExpiredSessions(), and Cutelyst::MemcachedSessionStore::setGroupKey().

◆ config() [1/2]

QVariant Context::config ( const QString &  key,
const QVariant &  defaultValue = QVariant() 
) const

Returns a configuration value for key with an optional default value

Definition at line 402 of file context.cpp.

References config().

◆ config() [2/2]

QVariantMap Cutelyst::Context::config ( ) const

Returns a configuration mapping for all configuration read

Referenced by config().

◆ controller() [1/2]

Controller* Cutelyst::Context::controller ( ) const

Returns the current controller

Referenced by dispatcher().

◆ controller() [2/2]

Controller * Context::controller ( const QString &  name) const

Returns the controller by name, or nullptr if the controller is not found

Definition at line 170 of file context.cpp.

◆ controllerName()

QString Cutelyst::Context::controllerName ( ) const

The current controller name

Referenced by dispatcher().

◆ customView()

View * Context::customView ( ) const

Returns the view set to be used for rendering this request, if one is set by setView() or nullptr if none was set

Definition at line 176 of file context.cpp.

Referenced by Cutelyst::RenderView::doExecute().

◆ detach()

void Context::detach ( Action action = nullptr)

The same as forward(action), but doesn't return to the previous action when processing is finished. When called with no arguments it escapes the processing chain entirely.

Definition at line 317 of file context.cpp.

Referenced by Cutelyst::RoleACL::aroundExecute(), Cutelyst::CSRFProtection::checkPassed(), Cutelyst::Action::doExecute(), Cutelyst::LangSelect::fromPath(), and Cutelyst::LangSelect::fromUrlQuery().

◆ detached()

bool Context::detached ( ) const

Returns true if the last executed Action requested that the processing be escaped.

Definition at line 311 of file context.cpp.

Referenced by Cutelyst::Action::doExecute().

◆ dispatcher()

Dispatcher * Context::dispatcher ( ) const

Returns the dispatcher instance. See Cutelyst::Dispatcher

Definition at line 152 of file context.cpp.

References controller(), and controllerName().

Referenced by Cutelyst::CSRFProtection::checkPassed().

◆ engine()

Engine * Context::engine ( ) const

Returns the engine instance. See Cutelyst::Engine

Definition at line 98 of file context.cpp.

◆ execute()

bool Context::execute ( Component code)

◆ forward() [1/2]

bool Context::forward ( Component component)

This is one way of calling another action (method) in the same or a different controller. You can also use directly call another method to the same or a different controller.

The main difference is that 'forward' uses some of the Cutelyst request cycle overhead, including debugging, which may be useful to you. On the other hand, there are some complications to using 'forward', restrictions on values returned from 'forward', and it may not handle errors as you prefer. Whether you use 'forward' or not is up to you; it is not considered superior to the other ways to call a method.

forward calls Component::execute.

Keep in mind that the End() method used is that of the caller action. So a c->detach() inside a forwarded action would run the End() method from the original action requested.

Definition at line 326 of file context.cpp.

Referenced by Cutelyst::RenderView::doExecute().

◆ forward() [2/2]

bool Context::forward ( const QString &  action)

This is one way of calling another action (method) in the same or a different controller. You can also use directly call another method to the same or a different controller.

The main difference is that 'forward' uses some of the Cutelyst request cycle overhead, including debugging, which may be useful to you. On the other hand, there are some complications to using 'forward', restrictions on values returned from 'forward', and it may not handle errors as you prefer. Whether you use 'forward' or not is up to you; it is not considered superior to the other ways to call a method.

forward calls another action, by its private name.

Keep in mind that the End() method used is that of the caller action. So a c->detach() inside a forwarded action would run the End() method from the original action requested.

Definition at line 332 of file context.cpp.

◆ getAction()

Action * Context::getAction ( const QString &  action,
const QString &  ns = QString() 
) const

Gets an action in a given namespace.

Definition at line 338 of file context.cpp.

◆ getActions()

QVector< Action * > Context::getActions ( const QString &  action,
const QString &  ns = QString() 
) const

Gets all actions of a given name in a namespace and all parent namespaces.

Definition at line 344 of file context.cpp.

◆ locale()

QLocale Context::locale ( ) const

◆ next

void Context::next ( bool  force = false)
slot

Decreases the local event loop counter created by wait() eventually quitting it's execution if 0 is reached.

If you set force to true it will quit the loop immediately regardless of it's counter.

Definition at line 438 of file context.cpp.

References actionName(), Cutelyst::Component::name(), Cutelyst::Component::reverse(), and stack().

◆ ns()

QString Cutelyst::Context::ns ( ) const

Returns the namespace of the current action. i.e. the URI prefix corresponding to the controller of the current action. For example: // a class named FooBar which inherits Controller c->ns(); // returns 'foo/bar'

Referenced by res().

◆ plugins()

QVector< Cutelyst::Plugin * > Context::plugins ( ) const

Returns all registered plugins

Definition at line 350 of file context.cpp.

◆ req()

Request* Cutelyst::Context::req ( ) const

Short for request()

Referenced by Context(), and res().

◆ request()

Request* Cutelyst::Context::request ( ) const

Returns the current Request object containing information about the client request Request

Referenced by res().

◆ res()

Response * Context::res ( ) const

◆ response()

Response * Context::response ( ) const

◆ setCustomView()

bool Context::setCustomView ( const QString &  name)

Defines the view to be used to render the request, it must be previously be registered by Cutelyst::Application.

Action classes like RenderView will use this value to overwrite their settings.

Returns true if a view with the given name was found

Definition at line 188 of file context.cpp.

◆ setLocale()

void Context::setLocale ( const QLocale &  locale)

Defines the current locale to be used when processing Views or translating user messages.

Setting a locale on a web application can be done in many ways, so it's up to the developer to decide which one to use.

For example it's possible to try to guess the user locale with the request header Accept-Language, and or use the chained dispatcher to first match the locale as in "example.com/pt-br/some_action", and or store the locale into a cookie or session.

Be sure to set it as soon as possible so that all content can be properly localized.

Definition at line 396 of file context.cpp.

References locale().

Referenced by Cutelyst::LangSelect::fromPath().

◆ setStash() [1/2]

void Context::setStash ( const QString &  key,
const QVariant &  value 
)

◆ setStash() [2/2]

void Context::setStash ( const QString &  key,
const ParamsMultiMap map 
)

A convenient method to set a single ParamsMultiMap to the stash

Definition at line 213 of file context.cpp.

◆ stack()

QStack< Component * > Context::stack ( ) const

Returns the internal execution stack (actions that are currently executing).

Definition at line 219 of file context.cpp.

Referenced by Cutelyst::Dispatcher::dispatchers(), and next().

◆ stash() [1/3]

void Cutelyst::Context::stash ( const QVariantHash &  unite)
inline

You can set hash keys by passing arguments, that will be united with the stash, which may be used to store data and pass it between components during a request.

The stash is automatically sent to the view. The stash is cleared at the end of a request; it cannot be used for persistent storage (for this you must use a session; see Cutelyst::Plugin::Session for a complete system integrated with Cutelyst).

c->stash({
{"foo", 10},
{"bar", QStringLiteral("my stash value")}
});

Definition at line 515 of file context.h.

Referenced by Cutelyst::CSRFProtection::checkPassed(), Cutelyst::ValidatorRule::defaultValue(), Cutelyst::SessionStoreFile::deleteExpiredSessions(), Cutelyst::Session::deleteReason(), Cutelyst::Session::deleteValue(), Cutelyst::Session::deleteValues(), Cutelyst::Session::expires(), Cutelyst::LangSelect::fromPath(), Cutelyst::CSRFProtection::getToken(), Cutelyst::Session::id(), Cutelyst::Session::isValid(), Cutelyst::ViewEmailTemplate::render(), Cutelyst::ClearSilver::render(), Cutelyst::ViewJson::render(), Cutelyst::GrantleeView::render(), Cutelyst::ViewEmail::render(), Cutelyst::ViewEmailTemplate::setDefaultView(), Cutelyst::MemcachedSessionStore::setGroupKey(), Cutelyst::Session::setValue(), Cutelyst::Authentication::user(), Cutelyst::Authentication::userExists(), Cutelyst::Authentication::userInRealm(), Cutelyst::ValidatorRequiredIfStash::validate(), Cutelyst::ValidatorIn::validate(), Cutelyst::ValidatorRequiredUnlessStash::validate(), Cutelyst::ValidatorPwQuality::validate(), and Cutelyst::Session::value().

◆ stash() [2/3]

QVariantHash & Context::stash ( )

Returns a QVariantHash reference to the stash, which may be used to store data and pass it between components during a request.

The stash is automatically sent to the view. The stash is cleared at the end of a request; it cannot be used for persistent storage (for this you must use a session; see Cutelyst::Plugin::Session for a complete system integrated with Cutelyst).

Definition at line 195 of file context.cpp.

◆ stash() [3/3]

QVariant Context::stash ( const QString &  key) const

A convenient method to retrieve a single value from the stash

Definition at line 201 of file context.cpp.

◆ state()

bool Cutelyst::Context::state ( ) const

Contains the return value of the last executed action.

Referenced by errors(), and setState().

◆ translate()

QString Context::translate ( const char *  context,
const char *  sourceText,
const char *  disambiguation = nullptr,
int  n = -1 
) const

Translates the sourceText for the given context into the language defined by locale().

See Application::addTranslator() for information about installation of translators. Internally this function will use QTranslator::translate().

void MyController::index(Context *c)
{
c->res()->setBody(c->translate("MyController", "You are on the index page."));
}

Definition at line 414 of file context.cpp.

Referenced by Cutelyst::ValidatorEmail::categoryString(), Cutelyst::CSRFProtection::checkPassed(), Cutelyst::ValidatorDomain::diagnoseString(), Cutelyst::ValidatorEmail::diagnoseString(), Cutelyst::Dispatcher::dispatch(), Cutelyst::ValidatorPwQuality::errorString(), Cutelyst::Memcached::errorString(), Cutelyst::ValidatorBetween::genericParsingError(), Cutelyst::ValidatorSize::genericParsingError(), Cutelyst::ValidatorMax::genericParsingError(), Cutelyst::ValidatorMin::genericParsingError(), Cutelyst::ValidatorBefore::genericParsingError(), Cutelyst::ValidatorAfter::genericParsingError(), Cutelyst::ValidatorRule::genericParsingError(), Cutelyst::ValidatorIn::genericValidationDataError(), Cutelyst::ValidatorNotIn::genericValidationDataError(), Cutelyst::ValidatorSize::genericValidationDataError(), Cutelyst::ValidatorMax::genericValidationDataError(), Cutelyst::ValidatorMin::genericValidationDataError(), Cutelyst::ValidatorBetween::genericValidationDataError(), Cutelyst::ValidatorBefore::genericValidationDataError(), Cutelyst::ValidatorAfter::genericValidationDataError(), Cutelyst::ValidatorFileSize::genericValidationDataError(), Cutelyst::ValidatorRule::genericValidationDataError(), Cutelyst::ValidatorPresent::genericValidationError(), Cutelyst::ValidatorFilled::genericValidationError(), Cutelyst::ValidatorRequired::genericValidationError(), Cutelyst::ValidatorBoolean::genericValidationError(), Cutelyst::ValidatorConfirmed::genericValidationError(), Cutelyst::ValidatorJson::genericValidationError(), Cutelyst::ValidatorRequiredWithoutAll::genericValidationError(), Cutelyst::ValidatorDifferent::genericValidationError(), Cutelyst::ValidatorRegularExpression::genericValidationError(), Cutelyst::ValidatorRequiredUnless::genericValidationError(), Cutelyst::ValidatorRequiredWithAll::genericValidationError(), Cutelyst::ValidatorRequiredWithout::genericValidationError(), Cutelyst::ValidatorRequiredWith::genericValidationError(), Cutelyst::ValidatorRequiredIf::genericValidationError(), Cutelyst::ValidatorIn::genericValidationError(), Cutelyst::ValidatorRequiredIfStash::genericValidationError(), Cutelyst::ValidatorInteger::genericValidationError(), Cutelyst::ValidatorAccepted::genericValidationError(), Cutelyst::ValidatorNotIn::genericValidationError(), Cutelyst::ValidatorRequiredUnlessStash::genericValidationError(), Cutelyst::ValidatorNumeric::genericValidationError(), Cutelyst::ValidatorTime::genericValidationError(), Cutelyst::ValidatorDate::genericValidationError(), Cutelyst::ValidatorDateTime::genericValidationError(), Cutelyst::ValidatorSize::genericValidationError(), Cutelyst::ValidatorMax::genericValidationError(), Cutelyst::ValidatorSame::genericValidationError(), Cutelyst::ValidatorMin::genericValidationError(), Cutelyst::ValidatorUrl::genericValidationError(), Cutelyst::ValidatorBetween::genericValidationError(), Cutelyst::ValidatorDigitsBetween::genericValidationError(), Cutelyst::ValidatorDigits::genericValidationError(), Cutelyst::ValidatorAlphaNum::genericValidationError(), Cutelyst::ValidatorAlphaDash::genericValidationError(), Cutelyst::ValidatorAlpha::genericValidationError(), Cutelyst::ValidatorIp::genericValidationError(), Cutelyst::ValidatorAfter::genericValidationError(), Cutelyst::ValidatorBefore::genericValidationError(), Cutelyst::ValidatorFileSize::genericValidationError(), Cutelyst::ValidatorRule::genericValidationError(), Cutelyst::ValidatorRule::label(), Cutelyst::ValidatorRule::parsingError(), Cutelyst::GrantleeView::render(), Cutelyst::ValidatorRule::validationDataError(), and Cutelyst::ValidatorRule::validationError().

◆ uriFor() [1/4]

QUrl Context::uriFor ( const QString &  path = QString(),
const QStringList &  args = QStringList(),
const ParamsMultiMap queryValues = ParamsMultiMap() 
) const

Constructs an absolute QUrl object based on the application root, the provided path, and the additional arguments and query parameters provided. When used as a string, provides a textual URI.

The first argument is taken as a public URI path relative c->ns (if it doesn't begin with a forward slash) or relative to the application root (if it does). It is then merged with c->request()->base() any args are appended as additional path components; and any queryValues> are appended as "?foo=bar" parameters.

Definition at line 225 of file context.cpp.

Referenced by Cutelyst::ActionREST::doExecute(), uriFor(), and uriForAction().

◆ uriFor() [2/4]

QUrl Cutelyst::Context::uriFor ( const QString &  path,
const ParamsMultiMap queryValues 
) const
inline

Constructs an absolute QUrl object based on the application root, the provided path, and the additional arguments and query parameters provided. When used as a string, provides a textual URI.

The first argument is taken as a public URI path relative c->ns (if it doesn't begin with a forward slash) or relative to the application root (if it does). It is then merged with c->request()->base() and any queryValues> are appended as "?foo=bar" parameters.

Definition at line 518 of file context.h.

◆ uriFor() [3/4]

QUrl Context::uriFor ( Action action,
const QStringList &  captures = QStringList(),
const QStringList &  args = QStringList(),
const ParamsMultiMap queryValues = ParamsMultiMap() 
) const

Constructs an absolute QUrl object based on the application root, the provided path, and the additional arguments and query parameters provided. When used as a string, provides a textual URI.

If no arguments are provided, the URI for the current action is returned. To return the current action and also provide args, use c->uriFor(c->action(), args).

Definition at line 260 of file context.cpp.

References action(), Cutelyst::Action::numberOfCaptures(), and uriFor().

◆ uriFor() [4/4]

QUrl Cutelyst::Context::uriFor ( Action action,
const ParamsMultiMap queryValues 
) const
inline

Constructs an absolute QUrl object based on the application root, the provided path, and the additional arguments and query parameters provided. When used as a string, provides a textual URI.

Definition at line 521 of file context.h.

◆ uriForAction() [1/2]

QUrl Context::uriForAction ( const QString &  path,
const QStringList &  captures = QStringList(),
const QStringList &  args = QStringList(),
const ParamsMultiMap queryValues = ParamsMultiMap() 
) const

A private path to the Cutelyst action you want to create a URI for.

This is a shortcut for calling c->dispatcher()->getActionByPath(path) and passing the resulting action and the remaining arguments to c->uri_for.

Note that although the path looks like a URI that dispatches to the wanted action, it is not a URI, but an internal path to that action.

For example, if the action looks like:

class Users : public Cutelyst::Controller
{
public:
C_ATTR(lst, :Path(the-list))
void lst(Context *c);
};

You can use: c->uriForAction('/users/lst'); and it will create the URI /users/the-list.

Definition at line 296 of file context.cpp.

References action(), and uriFor().

◆ uriForAction() [2/2]

QUrl Cutelyst::Context::uriForAction ( const QString &  path,
const ParamsMultiMap queryValues 
) const
inline

A convenience method for the uriForAction() without the arguments parameter

Definition at line 524 of file context.h.

◆ view()

View * Context::view ( const QString &  name = QString()) const

Returns the view with name name or nullptr if not found

Definition at line 182 of file context.cpp.

Referenced by Cutelyst::ViewEmailTemplate::setDefaultView().

◆ wait()

bool Context::wait ( uint  count = 1)

This creates a local event loop that requires next() to be called count times.

If wait() was already called and didn't return it will increase the counter of the unfinished wait().

Returns true when the event loop finishes and false if the call only increased the event loop counter.

Definition at line 420 of file context.cpp.