Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
563 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
<?php | ||
/** | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* For full copyright and license information, please see the LICENSE.txt | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @since 3.0.0 | ||
* @license http://www.opensource.org/licenses/mit-license.php MIT License | ||
*/ | ||
namespace Cake\Utility; | ||
|
||
use Cake\Core\App; | ||
use Cake\Utility\Inflector; | ||
use Cake\View\Error; | ||
|
||
/** | ||
* Provides cell() method for usage in Controller and View classes. | ||
* | ||
*/ | ||
trait CellTrait { | ||
|
||
/** | ||
* Renders the given cell. | ||
* | ||
* Example: | ||
* | ||
* // Taxonomy\View\Cell\TagCloudCell::smallList() | ||
* $cell = $this->cell('Taxonomy.TagCloud::smallList', ['limit' => 10]); | ||
* | ||
* // App\View\Cell\TagCloudCell::smallList() | ||
* $cell = $this->cell('TagCloud::smallList', ['limit' => 10]); | ||
* | ||
* The `display` action will be used by default when no action is provided: | ||
* | ||
* // Taxonomy\View\Cell\TagCloudCell::display() | ||
* $cell = $this->cell('Taxonomy.TagCloud'); | ||
* | ||
* Cells are not rendered until they are echoed. | ||
* | ||
* @param string $cell You must indicate both cell name, and optionally a cell action. e.g.: `TagCloud::smallList` | ||
* will invoke `View\Cell\TagCloudCell::smallList()`, `display` action will be invoked by default when none is provided. | ||
* @param array $data Additional arguments for cell method. e.g.: | ||
* `cell('TagCloud::smallList', ['a1' => 'v1', 'a2' => 'v2'])` maps to `View\Cell\TagCloud::smallList(v1, v2)` | ||
* @param array $options Options for Cell's constructor | ||
* @return \Cake\View\Cell The cell instance | ||
* @throws \Cake\View\Error\MissingCellException If Cell class was not found | ||
*/ | ||
public function cell($cell, $data = [], $options = []) { | ||
$parts = explode('::', $cell); | ||
|
||
if (count($parts) == 2) { | ||
list($pluginAndCell, $action) = [$parts[0], $parts[1]]; | ||
} else { | ||
list($pluginAndCell, $action) = [$parts[0], 'display']; | ||
} | ||
|
||
list($plugin, $cellName) = pluginSplit($pluginAndCell); | ||
|
||
$className = App::classname($pluginAndCell, 'View/Cell', 'Cell'); | ||
|
||
if (!$className) { | ||
throw new Error\MissingCellException(array('className' => $pluginAndCell . 'Cell')); | ||
} | ||
|
||
$cellInstance = new $className($this->request, $this->response, $this->getEventManager(), $options); | ||
$cellInstance->action = Inflector::underscore($action); | ||
$cellInstance->plugin = !empty($plugin) ? $plugin : null; | ||
$length = count($data); | ||
|
||
if ($length) { | ||
$data = array_values($data); | ||
} | ||
|
||
call_user_func_array([$cellInstance, $action], $data); | ||
|
||
return $cellInstance; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
<?php | ||
/** | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* For full copyright and license information, please see the LICENSE.txt | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @since 3.0.0 | ||
* @license http://www.opensource.org/licenses/mit-license.php MIT License | ||
*/ | ||
namespace Cake\View; | ||
|
||
use Cake\Core\App; | ||
use Cake\Event\EventManager; | ||
use Cake\Network\Request; | ||
use Cake\Network\Response; | ||
use Cake\Utility\Inflector; | ||
use Cake\Utility\ModelAwareTrait; | ||
use Cake\Utility\ViewVarsTrait; | ||
|
||
/** | ||
* Cell base. | ||
* | ||
*/ | ||
abstract class Cell { | ||
|
||
use ModelAwareTrait; | ||
use ViewVarsTrait; | ||
|
||
/** | ||
* Instance of the View created during rendering. Won't be set until after | ||
* Cell::__toString() is called. | ||
* | ||
* @var \Cake\View\View | ||
*/ | ||
public $View; | ||
|
||
/** | ||
* Name of the action that was invoked. | ||
* | ||
* Action name will be inflected to get the template name when rendering. | ||
* | ||
* @var string | ||
*/ | ||
public $action; | ||
|
||
/** | ||
* Automatically set to the name of a plugin. | ||
* | ||
* @var string | ||
*/ | ||
public $plugin = null; | ||
|
||
/** | ||
* An instance of a Cake\Network\Request object that contains information about the current request. | ||
* This object contains all the information about a request and several methods for reading | ||
* additional information about the request. | ||
* | ||
* @var \Cake\Network\Request | ||
*/ | ||
public $request; | ||
|
||
/** | ||
* An instance of a Response object that contains information about the impending response | ||
* | ||
* @var \Cake\Network\Response | ||
*/ | ||
public $response; | ||
|
||
/** | ||
* The name of the View class this cell sends output to. | ||
* | ||
* @var string | ||
*/ | ||
public $viewClass = 'Cake\View\View'; | ||
|
||
/** | ||
* Instance of the Cake\Event\EventManager this cell is using | ||
* to dispatch inner events. | ||
* | ||
* @var \Cake\Event\EventManager | ||
*/ | ||
protected $_eventManager = null; | ||
|
||
/** | ||
* These properties are settable directly on Cell and passed to the View as options. | ||
* | ||
* @var array | ||
* @see \Cake\View\View | ||
*/ | ||
protected $_validViewOptions = [ | ||
'viewVars', 'helpers', 'viewPath', 'plugin', | ||
]; | ||
|
||
/** | ||
* List of valid options (constructor's fourth arguments) | ||
* | ||
* @var array | ||
*/ | ||
protected $_validCellOptions = []; | ||
|
||
/** | ||
* Constructor. | ||
* | ||
* @param \Cake\Network\Request $request | ||
* @param \Cake\Network\Response $response | ||
* @param \Cake\Event\EventManager $eventManager | ||
* @param array $cellOptions | ||
*/ | ||
public function __construct(Request $request = null, Response $response = null, | ||
EventManager $eventManager = null, array $cellOptions = []) { | ||
$this->_eventManager = $eventManager; | ||
$this->request = $request; | ||
$this->response = $response; | ||
$this->modelFactory('Table', ['Cake\ORM\TableRegistry', 'get']); | ||
|
||
foreach ($this->_validCellOptions as $var) { | ||
if (isset($cellOptions[$var])) { | ||
$this->{$var} = $cellOptions[$var]; | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* Rendering method. | ||
* | ||
* @param string $action Custom template name to render. If not provided (null), the last | ||
* value will be used. This value is automatically set by `CellTrait::cell()`. | ||
* @return void | ||
*/ | ||
public function render($action = null) { | ||
if ($action !== null) { | ||
$this->action = $action; | ||
} | ||
|
||
return $this->__toString(); | ||
} | ||
|
||
/** | ||
* Magic method. | ||
* | ||
* Starts the rendering process when Cell is echoed. | ||
* | ||
* @return string Rendered cell | ||
*/ | ||
public function __toString() { | ||
$this->View = $this->createView(); | ||
|
||
$this->View->layout = false; | ||
$className = explode('\\', get_class($this)); | ||
$className = array_pop($className); | ||
$this->View->subDir = 'Cell' . DS . substr($className, 0, strpos($className, 'Cell')); | ||
|
||
return $this->View->render(Inflector::underscore($this->action)); | ||
} | ||
|
||
/** | ||
* Debug info. | ||
* | ||
* @return void | ||
*/ | ||
public function __debugInfo() { | ||
return [ | ||
'plugin' => $this->plugin, | ||
'action' => $this->action, | ||
'viewClass' => $this->viewClass, | ||
'request' => $this->request, | ||
'response' => $this->response, | ||
]; | ||
} | ||
|
||
/** | ||
* Returns the Cake\Event\EventManager manager instance for this cell. | ||
* | ||
* You can use this instance to register any new listeners or callbacks to the | ||
* cell events, or create your own events and trigger them at will. | ||
* | ||
* @return \Cake\Event\EventManager | ||
*/ | ||
public function getEventManager() { | ||
if (empty($this->_eventManager)) { | ||
$this->_eventManager = new EventManager(); | ||
} | ||
return $this->_eventManager; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?php | ||
/** | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* For full copyright and license information, please see the LICENSE.txt | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @since 3.0.0 | ||
* @license http://www.opensource.org/licenses/mit-license.php MIT License | ||
*/ | ||
namespace Cake\View\Error; | ||
|
||
use Cake\Error\Exception; | ||
|
||
/** | ||
* Used when a cell class file cannot be found. | ||
* | ||
*/ | ||
class MissingCellException extends Exception { | ||
|
||
protected $_messageTemplate = 'Cell class "%s" is missing.'; | ||
|
||
} |
Oops, something went wrong.