for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Nexendrie\Menu;
/**
* Menu item
*
* @author Jakub Konečný
* @property string $link
* @property string $text
* @property-read bool $allowed
*/
class MenuItem {
use \Nette\SmartObject;
/** @var string */
protected $text;
protected $link;
/** @var array of [IMenuItemCondition, parameter] */
protected $conditions = [];
/** @var IMenuItemLinkRender[] */
protected $linkRenders = [];
public function __construct(string $link, string $text) {
$this->link = $link;
$this->text = $text;
}
public function getLink(): string {
$link = $this->link;
foreach($this->linkRenders as $render) {
if($render->isApplicable($this->link)) {
$link = $render->renderLink($this->link);
break;
return $link;
public function setLink(string $link) {
public function getText(): string {
return $this->text;
public function setText(string $text) {
* @param mixed $parameter
public function addCondition(IMenuItemCondition $condition, $parameter): void {
$this->conditions[$condition->getName()] = [$condition, $parameter];
public function addLinkRender(IMenuItemLinkRender $render): void {
$this->linkRenders[$render->getName()] = $render;
public function isAllowed(): bool {
foreach($this->conditions as $condition) {
if(!$condition[0]->isAllowed($condition[1])) {
return false;
return true;
?>