After adding a block file to src/Plugin/Block I can't add the block on the Block Layout admin page. When I filter by block name I can see it, but then when I try to place it I can't get to the configure block screen (pressing the 'Place block' button produces no effect). I do not get any errors.
What could be the reason for such a behaviour?
The block file contents:
<?php
namespace Drupal\Core\Block\BlockBase;
use Drupal\Core\Link;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\core\Url;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Provides a block with a link to start the toru.
*
* @Block(
* id = "iai_tour_link",
* admin_label = @Translation("Link for the IAI Product Guide tour"),
* category = @Translation("Links"),
* context = {
* "node" = @ContextDefinition(
* "entity:node",
* label = @Translation("Current Node")
* )
* }
* )
*/
class TourLinkBlock extends BlockBase implements ContainerFactoryPluginInterface{
/**
* The current user.
*
* @var \Drupal\Core\Session\AccountInterface;
*
*/
protected $currentUser;
/**
* Constructs an TourLinkBlock object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountInterface $current_user){
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->currentUser = $current_user;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition){
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('current_user')
);
}
public function build(){
$node = $this->getContextValue('node');
if ($this->currentUser->hasPermission('access tour') && $node->getType() == 'book'){
$url = Url::fromRoute('<current>', array(), array('query' => array('tour' => 1)));
$build['tour_link']= [
'#type' => 'markup',
'#markup' => Link::fromTextAndUrl(t('Take the tour!'), $url)->toString(),
];
$build['#attached']['library'][] = 'tour/tour';
return $build;
}
}
}