Wyciąganie akcji Zend_Controller w modułach systemu

Czasami w przypadku tworzenia systemu kontroli dostępu do zasobów aplikacji chcemy mieć wszystko np. w bazie danych. W przypadku kiedy aplikacja jest spora to niestety okazuje się ze ręczne prowadzanie elementów systemu do bazy jest zwyczajnie męczące, a fixtures np. w Doctrine to zbędny wysiłek można posilić się prostą funkcją parsującą nasze pliki.

Oczywiście kod poniżej jest przystosowany do mojej aplikacji, ale myślę że nie trudno go zmienić pod Wasze potrzeby.

Wynikiem jest tablica z pełną ścieżką do akcji w ZF


public function getAllSystemResources()
{

$d = Zend_Registry::getInstance();

$module_dir = $d->config['doctrine']['models_path']."/../modules";
$temp = array_diff( scandir( $module_dir), Array( ".", "..", ".svn"));
$modules = array();
$controller_directorys = array();

foreach ($temp as $module) {
if (is_dir($module_dir . "/" . $module."/controllers/")) {
array_push($modules,$module);
array_push($controller_directorys, $module_dir . "/" . $module."/controllers/");
}
}

foreach ($controller_directorys as $dir) {
foreach (scandir($dir) as $dirstructure) {
if (is_file($dir . "/" . $dirstructure)) {
if (strstr($dirstructure,"Controller.php") != false) {
include_once($dir . "/" . $dirstructure);
}
}
}
}
$db_structure = array();
$db_path = array();

foreach(get_declared_classes() as $c)
{
if(is_subclass_of($c, 'App_Controller_Action'))
{
$functions = array();
foreach (get_class_methods($c) as $f)
{
if (strstr($f,"Action") != false)
{
array_push($functions,substr($f,0,strpos($f,"Action")));
}
}
$c = strtolower(substr($c,0,strpos($c,"Controller")));

if (strstr($c,"_") != false)
{
$db_structure[substr($c,0,strpos($c,"_"))][substr($c,strpos($c,"_") + 1)] = $functions;
foreach($functions as $fun)
{
$index = substr($c,0,strpos($c,"_")).substr($c,strpos($c,"_") + 1).$fun;
$db_path[$index] = substr($c,0,strpos($c,"_"))."/".substr($c,strpos($c,"_") + 1)."/".$fun;
}
}else
{
$db_structure[$default_module][$c] = $functions;
$db_path[] = $default_module."/".$c."/".$functions;
}
}
}
return $db_path;
}

Leave a Reply

Your email address will not be published. Required fields are marked *