Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8532045
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 11, 20262026-06-11T09:37:25+00:00 2026-06-11T09:37:25+00:00

So I’ve started studying MVC (real MVC, not framework MVC) a bit more in-depth,

  • 0

So I’ve started studying MVC (real MVC, not framework MVC) a bit more in-depth, and I’m attempting to develop a small framework. I’m working by reading other frameworks such as Symphony and Zend, seeing how they do their job, and attempt to implement it myself.

The place where I got stuck was the URL routing system:

<?php
namespace Application\Common;

class RouteBuilder {

    public function create($name, $parameters) {
        $route           = new Route($name);
        $route->resource = array_keys($parameters)[0];
        $route->defaults = $parameters["defaults"];
        $notation        = $parameters["notation"];
        $notation = preg_replace("/\[(.*)\]/", "(:?$1)?", $notation);
        foreach ($parameters["conditions"] as $param => $condition) {
            $notation = \str_replace($param, $condition, $notation);
        }

        $notation = preg_replace("/:([a-z]+)/i", "(?P<$1>[^/.,;?\n]+)", $notation);

        //@TODO: Continue pattern replacement!!
    }
}
/* How a single entry looks like
 * "main": {
    "notation": "/:action",
    "defaults": {
        "resource"  :   "Authentication",
    },
    "conditions":   {
        ":action"   :   "(login)|(register)"
    }
},

 */

I just can’t get my head wrapped around it properly. What is the application workflow from here?

The pattern is generated, probably a Route object to be kept under the Request object or something, then what? How does it work?

P.S. Looking for a real, well explained answer here. I really want to understand the subject. I would appreciate if someone took the time to write a real elaborate answer.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-11T09:37:27+00:00Added an answer on June 11, 2026 at 9:37 am

    An MVC Router class (which is part of a broader Front Controller) breaks down an HTTP request’s URL–specifically, the path component (and potentially the query string).

    The Router attempts to match the first one, or two, parts of the path component to a corresponding route combination (Controller / Action [method], or just a Controller that executes a default action (method).

    An action, or command, is simply a method off of a specific Controller.

    There is usually an abstract Controller and many children of Controller, one for each webpage (generally speaking).

    Some might say that the Router also passes arguments to the desired Controller‘s method, if any are present in the URL.

    Note: Object-oriented programming purists, following the Single Responsibility Principle, might argue that routing components of a URL and dispatching a Controller class are two separate responsibilities. In that case, a Dispatcherclass would actually instantiate the Controller and pass one of its methods any arguments derived from the client HTTP request.

    Example 1: Controller, but no action or arguments.

    http://localhost/contact On a GET request, this might display a form.

    Controller = Contract

    Action = Default (commonly an index() method)

    ======================

    Example 2: Controller and action, but no arguments.

    http://localhost/contact/send On a POST request, this might kick of server-side validation and attempt to send a message.

    Controller = Contract

    Action = send

    ======================

    Example 3: Controller, action, and arguments.

    http://localhost/contact/send/sync On a POST request, this might kick of server-side validation and attempt to send a message. However, in this case, maybe JavaScript is not active. Thus, to support graceful degradation, you can tell the ContactController to use a View that supports screen redraw and responds with an HTTP header of Content-Type: text/html, instead of Content-Type: application/json. sync would be passed as an argument to ContactConroller::send(). Note, my sync example was totally arbitrary and made up, but I thought it fit the bill!

    Controller = Contract

    Action = send

    Arguments = [sync] // Yes, pass arguments in an array!

    A Router class instantiates the requested, concrete child Controller, calls the requested method from the controller instance, and passes the controller method its arguments (if any).

    1) Your Router class should first check to see if there is a concrete Controller that it can instantiate (using the name as found in the URL, plus the word “Controller”). If the controller is found, test for the presence of the requested method (action).

    2) If the Router cannot find and load the necessary PHP at runtime (using an autoloader is advised) to instantiate a concrete Controller child, it should then check an array (typically found in another class name Route) to see if the requested URL matches, using regular expressions, any of the elements contained within. A basic skeleton of a Route class follows.

    Note: .*? = Zero, or more, of any character, non-capturing.

    class Route
    {
        private $routes = [
            ['url' => 'nieuws/economie/.*?', // regular expression.
             'controller' => 'news',
             'action' => 'economie'],
            ['url' => 'weerbericht/locatie/.*?', // regular expression.
             'controller' => 'weather',
             'action' => 'location']
        ];
    
        public function __contstruct()
        {
    
        }
    
        public function getRoutes()
        {
            return $this->routes;
        }
    }
    

    Why use a regular expression? One is not likely to get reliable matching accomplished for data after the second forward slash in the URL.

    /controller/method/param1/param2/..., where param[x] could be anything!

    Warning: It is good practice change the default regular expression pattern delimiter (‘/’) when targeting data contains the pattern delimiter (in this case, forward slashes ‘/’. Almost any non-valid URL character would be a great choice.

    A method of the Router class will iterate over the Route::routes array to see if there is a regular expression match between the target URL and the string value associated with a 2nd level url index. If a match is found, the Router then knows which concrete Controller to instantiate and the subsequent method to call. Arguments will be passed to the method as necessary.

    Always be wary of edge cases, such as URLs representing the following.

    `/`   // Should take you to the home page / HomeController by default
    `''`  // Should take you to the home page / HomeController by default
    `/gibberish&^&*^&*%#&(*$%&*#`   // Reject
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

link Im having trouble converting the html entites into html characters, (&# 8217;) i
I used javascript for loading a picture on my website depending on which small
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I am reading a book about Javascript and jQuery and using one of the
In my XML file chapters tag has more chapter tag.i need to display chapters
I'm parsing an RSS feed that has an &#8217; in it. SimpleXML turns this
I have an MVC Razor view @{ ViewBag.Title = Index; var c = (char)146;
I need a function that will clean a strings' special characters. I do NOT
I'm working with an upstream system that sometimes sends me text destined for HTML/XML
Is it possible to replace javascript w/ HTML if JavaScript is not enabled on

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.