Drush: Drush\Drupal\FindCommandsCompilerPass Class Reference

Inheritance diagram for Drush\Drupal\FindCommandsCompilerPass:
Collaboration diagram for Drush\Drupal\FindCommandsCompilerPass:

Public Member Functions

 __construct ($storageClassId, $tagId)
 process (ContainerBuilder $container)

Protected Attributes

 $storageClassId
 $tagId

Detailed Description

This compiler pass is added to Drupal's ContainerBuilder by our own subclass of DrupalKernel. Our DrupalKernel subclass knows which compiler passes to add because they are registered to it via its 'alter()' method. This happens in DrupalBoot8 immediately after the DrupalKernel object is created.

Having been thus added, this compiler pass will then be called during $kernel->boot(), when Drupal's dependency injection container is being compiled. Since we cannot use the container at this point (since its initialization is not yet complete), we instead alter the definition of a storage class in the container to add more setter injection method calls to 'addCommandReference'.

Later, after the container has been completely initialized, we can fetch the storage class from the DI container (perhaps also via injection from a reference in the container). At that point, we can request the list of Console commands that were added via the (delayed) call(s) to addCommandReference.

Documentation:

http://symfony.com/doc/2.7/components/dependency_injection/tags.html#create-a-compilerpass

Definition at line 33 of file FindCommandsCompilerPass.php.


The documentation for this class was generated from the following file:

File

doxygen/html/classDrush_1_1Drupal_1_1FindCommandsCompilerPass.html
View source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Drush: Drush\Drupal\FindCommandsCompilerPass Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Drush
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><b>Drush</b></li><li class="navelem"><b>Drupal</b></li><li class="navelem"><a class="el" href="classDrush_1_1Drupal_1_1FindCommandsCompilerPass.html">FindCommandsCompilerPass</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classDrush_1_1Drupal_1_1FindCommandsCompilerPass-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">Drush\Drupal\FindCommandsCompilerPass Class Reference</div>  </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for Drush\Drupal\FindCommandsCompilerPass:</div>
<div class="dyncontent">
<div class="center"><img src="classDrush_1_1Drupal_1_1FindCommandsCompilerPass__inherit__graph.png" border="0" usemap="#Drush_0CDrupal_0CFindCommandsCompilerPass_inherit__map" alt="Inheritance graph"/></div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for Drush\Drupal\FindCommandsCompilerPass:</div>
<div class="dyncontent">
<div class="center"><img src="classDrush_1_1Drupal_1_1FindCommandsCompilerPass__coll__graph.png" border="0" usemap="#Drush_0CDrupal_0CFindCommandsCompilerPass_coll__map" alt="Collaboration graph"/></div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aae7ca25194be1f50487f611b842599ba"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae7ca25194be1f50487f611b842599ba"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>__construct</b> ($storageClassId, $tagId)</td></tr>
<tr class="memitem:aaaf4641431339c2a1eaa4640e1e8eeeb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaaf4641431339c2a1eaa4640e1e8eeeb"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>process</b> (ContainerBuilder $container)</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a022ef40b508111bc44dc5f61163b0150"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a022ef40b508111bc44dc5f61163b0150"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>$storageClassId</b></td></tr>
<tr class="memitem:af04613cca1d3030f17a906b4447f1289"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af04613cca1d3030f17a906b4447f1289"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>$tagId</b></td></tr>
</table>
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>This compiler pass is added to <a class="el" href="namespaceDrupal.html">Drupal</a>'s ContainerBuilder by our own subclass of <a class="el" href="classDrush_1_1Drupal_1_1DrupalKernel.html">DrupalKernel</a>. Our <a class="el" href="classDrush_1_1Drupal_1_1DrupalKernel.html">DrupalKernel</a> subclass knows which compiler passes to add because they are registered to it via its 'alter()' method. This happens in DrupalBoot8 immediately after the <a class="el" href="classDrush_1_1Drupal_1_1DrupalKernel.html">DrupalKernel</a> object is created.</p>
<p>Having been thus added, this compiler pass will then be called during $kernel-&gt;boot(), when <a class="el" href="namespaceDrupal.html">Drupal</a>'s dependency injection container is being compiled. Since we cannot use the container at this point (since its initialization is not yet complete), we instead alter the definition of a storage class in the container to add more setter injection method calls to 'addCommandReference'.</p>
<p>Later, after the container has been completely initialized, we can fetch the storage class from the DI container (perhaps also via injection from a reference in the container). At that point, we can request the list of Console commands that were added via the (delayed) call(s) to addCommandReference.</p>
<p>Documentation:</p>
<p><a href="http://symfony.com/doc/2.7/components/dependency_injection/tags.html#create-a-compilerpass">http://symfony.com/doc/2.7/components/dependency_injection/tags.html#create-a-compilerpass</a> </p>

<p>Definition at line <a class="el" href="FindCommandsCompilerPass_8php_source.html#l00033">33</a> of file <a class="el" href="FindCommandsCompilerPass_8php_source.html">FindCommandsCompilerPass.php</a>.</p>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>lib/Drush/Drupal/<a class="el" href="FindCommandsCompilerPass_8php_source.html">FindCommandsCompilerPass.php</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Nov 2 2016 07:30:14 for Drush by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
</body>
</html>