Друзья!
Собираюсь начать разработку компонента с несколькими контроллерами. До этого писал простенькие вещи только с одним контроллером. И меня заинтересовала возможность скрыть передачу наименования контроллера через URI. Все мы знаем такую классическую схему:
require_once( JPATH_COMPONENT.DS.'controller.php' );
$controller = '';
if ($controller == JRequest::getCmd('controller'))
{
$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
jimport('joomla.filesystem.file');
if (JFile::exists($path)) {
require_once($path);
} else {
JError::raiseError('500', JText_::('Unknown controller'));
}
}
$classname = 'MycomponentController'.ucfirst($controller);
$controller = new $classname();
Но меня заинтересовал подход, который испольуется в JomSocial:
// Component configuration
$config = array('name'=>JString::strtolower(JRequest::getCmd('view', 'frontpage')));
$func = JRequest::getVar('func');
// Create the controller
$viewController = JString::strtolower($config['name']);
if( !JFile::exists( JPATH_COMPONENT.DS.'controllers'.DS.$viewController.'.php' ) )
{
echo JText::_('CC INVALID TASK');
return;
}
require_once (JPATH_COMPONENT.DS.'controllers'.DS.$viewController.'.php');
$viewController = JString::ucfirst($viewController);
$viewController = 'Community'.$viewController.'Controller';
$controller = new $viewController($config);
Как я понял, тут наименование контроллера не передается в URI, а используется наименование view, и в зависимости от этого подключается нужный контроллер.
Верно ли я понял? Можно ли использовать такой подход для подключения контроллера или могут возникнуть какие-то подводные камни?
Может кто-то использует другие способы подключения контроллеров и может поделиться своим опытом?