Good day everyone, [Phalcon 3.01 - INVO] Good day everyone. I have a questions regarding headmenu in INVO example.
The original headmenu: 'Home' - 'About' - 'Contact', updated menu: 'Home' - 'About' - 'Myitem', The menu-item of 'Contact' is not found.
I want to add new element(Myitem) on headmenu, app\library\Elements.php that content is following:
<?php
use Phalcon\Mvc\User\Component;
/**
- Elements
-
Helps to build UI elements for the application */ class Elements extends Component {
private $_headerMenu = array( 'navbar-left' => array( 'index' => array( 'caption' => 'Home', 'action' => 'index' ), 'invoices' => array( 'caption' => 'Invoices', 'action' => 'index' ), 'about' => array( 'caption' => 'About', 'action' => 'index' ), 'contact' => array( 'caption' => 'Contact', 'action' => 'index' ), 'contact' => array( 'caption' => 'Myitem', 'action' => 'index' ), ), 'navbar-right' => array( 'session' => array( 'caption' => 'Login/Sign Up', 'action' => 'index' ), ) );
private $_tabs = array( 'Invoices' => array( 'controller' => 'invoices', 'action' => 'index', 'any' => false ), 'Companies' => array( 'controller' => 'companies', 'action' => 'index', 'any' => true ), 'Products' => array( 'controller' => 'products', 'action' => 'index', 'any' => true ), 'Product Types' => array( 'controller' => 'producttypes', 'action' => 'index', 'any' => true ), 'Your Profile' => array( 'controller' => 'invoices', 'action' => 'profile', 'any' => false ) );
/**
- Builds header menu with left and right items
-
@return string */ public function getMenu() {
$auth = $this->session->get('auth'); if ($auth) { $this->_headerMenu['navbar-right']['session'] = array( 'caption' => 'Log Out', 'action' => 'end' ); } else { unset($this->_headerMenu['navbar-left']['invoices']); }
$controllerName = $this->view->getControllerName(); foreach ($this->_headerMenu as $position => $menu) { echo '<div class="nav-collapse">'; echo '<ul class="nav navbar-nav ', $position, '">'; foreach ($menu as $controller => $option) { if ($controllerName == $controller) { echo '<li class="active">'; } else { echo '<li>'; } echo $this->tag->linkTo($controller . '/' . $option['action'], $option['caption']); echo '</li>'; } echo '</ul>'; echo '</div>'; }
}
/**
- Returns menu tabs */ public function getTabs() { $controllerName = $this->view->getControllerName(); $actionName = $this->view->getActionName(); echo '<ul class="nav nav-tabs">'; foreach ($this->_tabs as $caption => $option) { if ($option['controller'] == $controllerName && ($option['action'] == $actionName || $option['any'])) { echo '<li class="active">'; } else { echo '<li>'; } echo $this->tag->linkTo($option['controller'] . '/' . $option['action'], $caption), '</li>'; } echo '</ul>'; } } -------- The end
app\plugins\SecurityPlubin.php that content is following: <?php
use Phalcon\Acl; use Phalcon\Acl\Role; use Phalcon\Acl\Resource; use Phalcon\Events\Event; use Phalcon\Mvc\User\Plugin; use Phalcon\Mvc\Dispatcher; use Phalcon\Acl\Adapter\Memory as AclList;
/**
- SecurityPlugin
-
This is the security plugin which controls that users only have access to the modules they're assigned to */ class SecurityPlugin extends Plugin { /**
- Returns an existing or new access control list
-
@returns AclList */ public function getAcl() { if (!isset($this->persistent->acl)) {
$acl = new AclList(); $acl->setDefaultAction(Acl::DENY); // Register roles $roles = [ 'users' => new Role( 'Users', 'Member privileges, granted after sign in.' ), 'guests' => new Role( 'Guests', 'Anyone browsing the site who is not signed in is considered to be a "Guest".' ) ]; foreach ($roles as $role) { $acl->addRole($role); } //Private area resources $privateResources = array( 'companies' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete'), 'products' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete'), 'producttypes' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete'), 'invoices' => array('index', 'profile') ); foreach ($privateResources as $resource => $actions) { $acl->addResource(new Resource($resource), $actions); } //Public area resources $publicResources = array( 'index' => array('index'), 'about' => array('index'), 'register' => array('index'), 'errors' => array('show401', 'show404', 'show500'), 'session' => array('index', 'register', 'start', 'end'), 'contact' => array('index', 'send'), 'myitem' => array('index') ); foreach ($publicResources as $resource => $actions) { $acl->addResource(new Resource($resource), $actions); } //Grant access to public areas to both users and guests foreach ($roles as $role) { foreach ($publicResources as $resource => $actions) { foreach ($actions as $action){ $acl->allow($role->getName(), $resource, $action); } } } //Grant access to private area to role Users foreach ($privateResources as $resource => $actions) { foreach ($actions as $action){ $acl->allow('Users', $resource, $action); } } //The acl is stored in session, APC would be useful here too $this->persistent->acl = $acl;
}
return $this->persistent->acl; }
/**
- This action is executed before execute any action in the application
- @param Event $event
- @param Dispatcher $dispatcher
-
@return bool */ public function beforeDispatch(Event $event, Dispatcher $dispatcher) {
$auth = $this->session->get('auth'); if (!$auth){ $role = 'Guests'; } else { $role = 'Users'; }
$controller = $dispatcher->getControllerName(); $action = $dispatcher->getActionName();
$acl = $this->getAcl();
if (!$acl->isResource($controller)) { $dispatcher->forward([ 'controller' => 'errors', 'action' => 'show404' ]);
return false;
}
$allowed = $acl->isAllowed($role, $controller, $action); if ($allowed != Acl::ALLOW) { $dispatcher->forward(array( 'controller' => 'errors', 'action' => 'show401' )); $this->session->destroy(); return false; } }