I'm not sure if I will hit your nail on the head, as I am a beginner with all this. But maybe you will find something useful in my way of doing things 
I personally never liked the way of using URL structures (/controller/action/). While this gives nice URLs I chose to go with the GET method and add parameters as needed. One of my parameters is - guess - controller
and determines in the frontcontroller which controller should be loaded.
PHP Code:
$controllerRequest = $this->requestMapper->getParameter('controller');
$class = ucfirst($controllerRequest).'Controller';
if (class_exists($class)) {
$controller = new $class($this->page, $this->registry);
$this->page = $controller->dispatch();
The loaded controllers then know (hard coded) which view to open (depending on the action: POST for insert/update data, GET for viewing things).
The views are still somewhat messy, but they deal with templating and loading the models from the database - nothing unusual but I haven't still found a good path for me to trod.
Concerning paths: I use autoload to load my classes. I only define my paths there and I am ok with this. My directory structure is somewhat messy, but works. My lib-directory holds all kinds of classes, value objects and interfaces in a more or less defined structure. The only place where this does not work is template files and language translations (to a certain level). I have template pages, modules, sidebars, widgets and what else and I still did not find a good way to go without using paths directly. Finding translations works well with the Iso Codes and the name of the template.
I rely somewhat on a strict naming convention though to always find the appropriate parts/classes. When there is a ProjectController, there is likely a ProjectView and a ProjectTemplate, but this might be overriden through a parameter.
To be a bit more concrete, my MapController has a MapView which then decides on the map parameter in the get request which map to display. But I found that keeping a good naming structure gives advantages in terms of flexibility in the view/controller.
PHP Code:
//
$this->mapName = $this->requestMapper->getParameter('map');
// Map model with specific info for map display (javascript driven)
require SITE_PATH.'/model/'.$this->mapName.'Model.php';
// Language
require SITE_PATH.'/languages/'.$this->currentLanguage.'/'.$this->mapName.'/'.$this->mapName.'.php';
// Template
$map = new Template(SITE_PATH.'/templates/'.$this->mapName.'.php');
But this is my first shot in the MVC game so I just might have gotten some concepts wrong
Bookmarks