modules-usage
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- PetrP
- Člen | 587
Vytahavat presentery z cache robot loaderu se mi vubec nelibi.
Mnohem rychlejší je si project všechny třídy
$presenters = array();
foreach (get_declared_classes() as $class)
{
if (strstr($class,'Presenter') === 'Presenter' AND $class != 'Presenter')
$presenters[] = $class;
}
// EDIT
Beru zpět, až když jsem to odeslal jsem si uvědomil, že všechny třídy
nejsou naincludovaný. Asi bych dnes neměl nic dělat ;]]
Editoval PetrP (3. 8. 2009 12:06)
- o5
- Člen | 416
vcera jsem si s tim hral, mozno poslouzit jako inspirace (pokud mate lepsi reseni, sem s tim :) )
//nekde v BasePresenter.php
$cache = Environment::getCache('Nette.RobotLoader');
foreach ($cache['data']['list'] as $name => $file) {
if (false !== strpos($file, dirname(__FILE__)) && $name != "basepresenter") {
$rClass = new ReflectionClass($name);
$actions = array();
foreach ($rClass->getMethods() as $rMethod) {
if (false !== strpos($rMethod->getName(), 'render') &&
$rMethod->getDeclaringClass()->getName() == $rClass->getName())
{
$actions[] = str_replace('render', '', $rMethod->getName());
}
}
if (!empty($actions)) {
$modules[str_replace('presenter', '', $name)] = $actions;
}
}
}
print_r($modules);
/*
Array
(
[articles] => Array
(
[0] => Add
[1] => Edit
[2] => Preview
)
[users] => Array
(
[0] => Add
[1] => Edit
)
)
*/
Editoval o5 (14. 9. 2009 13:22)