Monday, June 15, 2026
HomeiOS DevelopmentDynamic routes and web page hooks in Feather CMS on prime of...

Dynamic routes and web page hooks in Feather CMS on prime of Vapor 4

[ad_1]

Learn to create customized pages in Swift and register web optimization pleasant clear URLs utilizing the Feather CMS routing system.

Vapor

Routing in Vapor 4

Clicking a hyperlink in your browser often takes you to a brand new web page on some web site. That is fairly easy, all people loves looking the world broad internet by means of clicking hyperlinks, proper? 😅

The opposite a part of the story occurs on the server aspect behind the scenes. A backend server can deal with a given URL in a number of methods, however these days the most well-liked strategy is to make use of a web optimization pleasant element (let’s name this path) to find out the content material that must be returned as a response to the shopper (browser), after all we’re utilizing the HTTP protocol to switch information.

So when a shopper asks for a particular route (path, URL, no matter… e.g. /foo) the server must determine what to return. This determination making course of is named routing. In Vapor 4 you possibly can simply setup route handlers for a particular endpoint.

import Vapor

public func configure(_ app: Software) throws {
    app.get("foo") { req -> String in
        return "bar"
    }
}

That is completely wonderful, however fairly a static strategy. By static I imply that it’s important to alter the Swift code if you wish to register a brand new route. You additionally should rebuild and ultimately redeploy the server software if you wish to mirror the adjustments. That is programmer pleasant, however not so consumer pleasant.

One other factor is that it’s important to be particular about your path while you setup your routes, in any other case it’s important to use the catchall sample if you wish to deal with dynamic routes. Generally this could additionally result in some sudden issues, nevertheless it’s not the top of the world. Vapor is ready for the problem and the framework handles this downside in such a chic method. Good job staff Vapor. 👍

So, how can we register dynamic routes utilizing Feather and permit the top consumer to specify customized endpoints? Is it attainable to put in writing the web page in Swift and in a while connect the code to an endpoint?



Dynamic routes in Feather CMS

With a purpose to write a web page in Swift and register it in a while beneath a dynamic path element it’s important to implement a customized web page hook perform. That is fairly easy, you simply should create a brand new module and implement the invoke methodology similar to we did it for the frontend-page hook within the Feather CMS module tutorial submit. A customized web page hook is a particular hook perform the place you explicitly set the title of the hook with a -page suffix. The static module will mean you can render this web page through a particular content material filter, extra about this half in a while. 💪

import Vapor
import Fluent
import ViperKit

closing class FooModule: ViperModule {

    static var title: String = "foo-module"

    func invoke(title: String, req: Request, params: [String : Any] = [:]) -> EventLoopFuture<Any?>? {
        change title {
        case "foo-page":
            let content material = params["page-content"] as! FrontendContentModel
            return strive! self.renderPage(req: req, web page: content material).map { $0 as Any }
        default:
            return nil
        }
    }
    
    func renderPage(req: Request, web page content material: FrontendContentModel) throws -> EventLoopFuture<Response> {
        req.eventLoop.future("foo").encodeResponse(for: req)
    }
}

The code is fairly easy, each single web page needs to be related to a FrontendContentModel object. You may can retreive this mannequin as an enter parameter and use it in case you want particular frontend associated attributes throughout the rendering course of. Please take into account that you all the time should return a future with a normal Response sort. It’s because hooks are very particular capabilities and the web page hook can solely work with Response objects, you possibly can all the time use the encodeResponse methodology in many of the circumstances. Within the hook it’s important to forged as soon as extra to Any, as a result of we love casting dynamic sorts in strongly typed languages. Anyway, it really works nice in apply… 🙈

So in case you do not care an excessive amount of about this whole sort casting hell, you possibly can merely place your present Vapor route handler into the render perform and return the output as a response. This manner you possibly can log in to the CMS and create a brand new web page with a singular slug for it. Let me present you the way to do that actual fast. After you log in as an admin, simply open the “Static / Pages” menu merchandise from the dashboard and create a brand new web page with the [foo-page] shortcode content material. Give it a reputation and press save.




In case you click on on the attention icon on the highest left nook it’s best to have the ability to see the draft model of your web page. As you possibly can see it is only a clean web page with the uncooked “foo” textual content on it, nothing particular, however hey, be happy to use Leaf and render some precise content material. Now in case you return to the admin it’s best to see a bit feather icon subsequent to the preview button, in case you click on on that you may edit the user-facing content material particulars of your web page, such because the slug (path, permalink, URL, no matter you name it), meta title and outline, social preview picture, publish date, content material filters and so on.




You may all the time change the slug and hook up your web page into a brand new route. While you press the save button (or hit cmd+s) the adjustments will likely be dwell instantly, no must rebuild your backend server in any respect. In fact, in case you tousled your code on the primary place you continue to have to repair that earlier than you possibly can hook it up, however hopefully that will not occur too typically. 🔨

The important thing takeaway right here is that you may write your code in Swift and in a while hook the web page as much as a particular route utilizing a dynamic strategy. That is actual good if it’s important to change the URL of a submit or a web page, however you continue to have the chance to create a daily web page or submit utilizing the admin interface. You should utilize HTML or markdown or you possibly can all the time construct your individual content material filter for Feather CMS in case you want extra customized conduct. If you do not know the place to start out with Feather, it’s best to learn my getting began tutorial, when you have points, please report on GitHub or submit a PR.



[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments