8 #include <Cutelyst/Context> 9 #include <Cutelyst/ParamsMultiMap> 10 #include <grantlee/exception.h> 11 #include <grantlee/parser.h> 17 , m_path(path, parser)
19 bool foundQuery =
false;
20 for (
const QString &expression : args) {
28 m_queryExpressions.push_back(Grantlee::FilterExpression(expression, parser));
30 m_argsExpressions.push_back(Grantlee::FilterExpression(expression, parser));
33 std::reverse(m_queryExpressions.begin(), m_queryExpressions.end());
36 std::pair<QString, QString> splitQuery(
const QString &query)
38 std::pair<QString, QString> ret;
46 void UriFor::render(Grantlee::OutputStream *stream, Grantlee::Context *gc)
const 51 const QVariantHash hash = gc->stackHash(0);
52 auto it = hash.constBegin();
53 while (it != hash.constEnd()) {
54 if (it.value().userType() == qMetaTypeId<Cutelyst::Context *>()) {
57 m_cutelystContext = it.key();
73 QVariant pathVar = m_path.resolve(gc);
74 if (pathVar.
userType() == qMetaTypeId<Grantlee::SafeString>()) {
75 path = pathVar.
value<Grantlee::SafeString>().
get();
79 qWarning() <<
"c_uri_for PATH is not a valid type";
83 for (
const Grantlee::FilterExpression &exp : m_argsExpressions) {
85 if (var.
userType() == qMetaTypeId<Grantlee::SafeString>()) {
86 args << var.
value<Grantlee::SafeString>().
get();
94 for (
const Grantlee::FilterExpression &exp : m_queryExpressions) {
96 if (var.
userType() == qMetaTypeId<Cutelyst::ParamsMultiMap>()) {
98 queryValues.
unite(map);
99 }
else if (var.
userType() == qMetaTypeId<Grantlee::SafeString>()) {
100 auto query = splitQuery(var.
value<Grantlee::SafeString>().get());
101 queryValues.
insert(query.first, query.second);
103 auto query = splitQuery(var.
toString());
104 queryValues.
insert(query.first, query.second);
107 for (
const QString &str : queries) {
108 auto query = splitQuery(str);
109 queryValues.
insert(query.first, query.second);
117 Grantlee::Node *UriForTag::getNode(
const QString &tagContent, Grantlee::Parser *p)
const 124 throw Grantlee::Exception(Grantlee::TagSyntaxError,
125 QStringLiteral(
"c_uri_for requires at least the path"));
128 return new UriFor(parts.
first(), parts.
mid(1), p);
131 #include "moc_urifor.cpp"
bool isEmpty() const const
typename QMap< Key, T >::iterator insert(const Key &key, const T &value)
int userType() const const
QMultiMap< K, V > & unite(const QMultiMap< K, V > &other)
QStringList toStringList() const const
QList< T > mid(int pos, int length) const const
QString section(QChar sep, int start, int end, QString::SectionFlags flags) const const
QVariant::Type type() const const
QString toString() const const