用PHP理解前端控制器

I'm very new with PHP, and I've managed to create a really rough CMS. At the moment, it's using many different pages and includes.

However, if possible I'd like to use a controller rather than having lots of pages (I've already got article.php/admin.php).

As an example, I'm trying to convert to something like this:

switch ( 'admin' ) {
case 'home':
    include 'view/home.php';
    break;

case 'admin':
    include 'view/admin.php';
    break;

case 'article':
    include 'view/article.php';
    break;

default:
    echo 'default';
    break;
}

This would be used with $_GET['page'], so the admin URL looks like: http://cms.dev/?page=admin

However, what happens if I need to go to a subdirectory of admin? For example, if these were hardcoded pages, I would go admin/new-post.php. Is there an equivalent I could get, using the $_GET method?

Sorry if this has not been explained well. Let me know and I will try and edit it. I've used a smorgsaboard of tutorials so I'm not 100% on any of this.

You can have forward slashes in your $_GET['page'] variable, so https://cms.dev/?page=admin/new-post.php should work fine.

Alternatively you can put this into your .htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

And then get it from the REQUEST_URI:

$uri = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);