public function getDividends() { return $this->hasMany ( Dividend::class, [ 'symbol_id' => "id" ] )->orderBy ( "exdate desc" ); } public function hasDividend() { return ! empty ( $this->dividends ); } public function toValue($val, $fromHuobi) { return $val / $this->huobi->rate * $fromHuobi->rate; } public function toExchangeValue($val, $fromHuobi) { return $val / $this->exchange->huobi->rate * $fromHuobi->rate; } public function getDividendsByYear($year) { $cacheKey = "$this->exchange_id $this->code $year 1"; return Yii::$app->cache->getOrSet ( $cacheKey, function () use ($year) { $dividends = $this->getDividends ()->where ( "YEAR(exdate) = :year ", [ "year" => $year
] )->orderBy ( "exdate desc" ); } public function hasDividend() { return ! empty ( $this->dividends ); } public function toValue($val, $fromHuobi) { return $val / $this->huobi->rate * $fromHuobi->rate; } public function toExchangeValue($val, $fromHuobi) { return $val / $this->exchange->huobi->rate * $fromHuobi->rate; } public function getDividendsByYear($year) { $cacheKey = "$this->exchange_id $this->code $year 1";
return $stock->amount * $this->getExchangeValue(); } public function getExchangeValue() { return $this->symbol->toExchangeValue($this->value, $this->huobi); } public function getSymbolValue() { return $this->symbol->toValue($this->value, $this->huobi); } public function getHuobi() { if (empty ( $this->currency )) { return $this->symbol->getHuobi (); } return $this->hasOne ( Huobi::class, [
$cacheKey = "$this->exchange_id $this->code $year 1"; return Yii::$app->cache->getOrSet ( $cacheKey, function () use ($year) { $dividends = $this->getDividends ()->where ( "YEAR(exdate) = :year ", [ "year" => $year ] )->all (); $total = __::from ( $dividends )->reduce ( function ($memo, $dividend) { return $memo + $dividend->getSymbolValue (); }, 0 ); $yield = $total / $this->price; return [ 'total' => $total, 'yield' => $yield, 'items' => $dividends
if(!is_object($collection) && !is_array($collection)) { if(is_null($memo)) throw new Exception('Invalid object'); else return self::_wrap($memo); } return self::_wrap(array_reduce($collection, $iterator, $memo)); } // Right-associative version of reduce // reduceRight alias: foldr public function foldr($collection=null, $iterator=null, $memo=null) { return self::reduceRight($collection, $iterator, $memo); }
return Yii::$app->cache->getOrSet ( $cacheKey, function () use ($year) { $dividends = $this->getDividends ()->where ( "YEAR(exdate) = :year ", [ "year" => $year ] )->all (); $total = __::from ( $dividends )->reduce ( function ($memo, $dividend) { return $memo + $dividend->getSymbolValue (); }, 0 ); $yield = $total / $this->price; return [ 'total' => $total, 'yield' => $yield, 'items' => $dividends ];
public function getOrSet($key, $callable, $duration = null, $dependency = null) { if (($value = $this->get($key)) !== false) { return $value; } $value = call_user_func($callable, $this); if (!$this->set($key, $value, $duration, $dependency)) { Yii::warning('Failed to set cache value for key ' . json_encode($key), __METHOD__); } return $value; }
$yield = $total / $this->price; return [ 'total' => $total, 'yield' => $yield, 'items' => $dividends ]; }, 86400 ); } public function getDividendsByYearTTM($offset = - 1) { $cacheKey = "$this->exchange_id $this->code $offset"; return Yii::$app->cache->getOrSet ( $cacheKey, function () use ($offset) { $fromDate = date ( "Y-m-d", strtotime ( "$offset years " ) ); $toDate = date ( "Y-m-d", strtotime ( ($offset + 1) . " years" ) );
<? $dividendYearPairs = []?> <? foreach ($symbol->dividends as $index => $dividend):?> <tr> <? if ($index == 0 || $dividend->getYear () != $symbol->dividends [$index - 1]->getYear ()) { $year = $dividend->getYear (); $divs = $symbol->getDividendsByYear ( $year ); $rowspan = count ( $divs ['items'] ); $yield = number_format ( $divs ['yield'] * 100, 2 ); $dividendYearPairs [] = [ "year" => $year, "yield" => $yield ];
{ $_obInitialLevel_ = ob_get_level(); ob_start(); ob_implicit_flush(false); extract($_params_, EXTR_OVERWRITE); try { require $_file_; return ob_get_clean(); } catch (\Exception $e) { while (ob_get_level() > $_obInitialLevel_) { if (!@ob_end_clean()) { ob_clean(); }
$this->renderers[$ext] = Yii::createObject($this->renderers[$ext]); } /* @var $renderer ViewRenderer */ $renderer = $this->renderers[$ext]; $output = $renderer->render($this, $viewFile, $params); } else { $output = $this->renderPhpFile($viewFile, $params); } $this->afterRender($viewFile, $params, $output); } array_pop($this->_viewFiles); $this->context = $oldContext;
* @throws InvalidCallException if the view cannot be resolved. * @see renderFile() */ public function render($view, $params = [], $context = null) { $viewFile = $this->findViewFile($view, $context); return $this->renderFile($viewFile, $params, $context); } /** * Finds the view file based on the given view name. * @param string $view the view name or the [path alias](guide:concept-aliases) of the view file. Please refer to [[render()]] * on how to specify this parameter.
* These parameters will not be available in the layout. * @return string the rendering result. * @throws InvalidArgumentException if the view file or the layout file does not exist. */ public function render($view, $params = []) { $content = $this->getView()->render($view, $params, $this); return $this->renderContent($content); } /** * Renders a static string by applying a layout. * @param string $content the static string being rendered
$symbol = Symbol::findOne ( [ 'country' => $this->country->name, 'code' => $code ] ); $symbol->hit ( "hits" ); return $this->render ( 'view', [ 'symbol' => $symbol ] ); } public function actionSearch($q) { $this->openAPI (); $symbols = Symbol::find ()->where ( "name like :q or abbr like :q or code like :q", [ 'q' => "%$q%"
$args = $this->controller->bindActionParams($this, $params); Yii::debug('Running action: ' . get_class($this->controller) . '::' . $this->actionMethod . '()', __METHOD__); if (Yii::$app->requestedParams === null) { Yii::$app->requestedParams = $args; } return call_user_func_array([$this->controller, $this->actionMethod], $args); } }
} $result = null; if ($runAction && $this->beforeAction($action)) { // run the action $result = $action->runWithParams($params); $result = $this->afterAction($action, $result); // call afterAction on modules foreach ($modules as $module) { /* @var $module Module */
$parts = $this->createController($route); if (is_array($parts)) { /* @var $controller Controller */ list($controller, $actionID) = $parts; $oldController = Yii::$app->controller; Yii::$app->controller = $controller; $result = $controller->runAction($actionID, $params); if ($oldController !== null) { Yii::$app->controller = $oldController; } return $result; }
$params = $this->catchAll; unset($params[0]); } try { Yii::debug("Route requested: '$route'", __METHOD__); $this->requestedRoute = $route; $result = $this->runAction($route, $params); if ($result instanceof Response) { return $result; } $response = $this->getResponse(); if ($result !== null) {
{ try { $this->state = self::STATE_BEFORE_REQUEST; $this->trigger(self::EVENT_BEFORE_REQUEST); $this->state = self::STATE_HANDLING_REQUEST; $response = $this->handleRequest($this->getRequest()); $this->state = self::STATE_AFTER_REQUEST; $this->trigger(self::EVENT_AFTER_REQUEST); $this->state = self::STATE_SENDING_RESPONSE; $response->send();
require (__DIR__ . '/../vendor/autoload.php'); require (__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); $config = require (__DIR__ . '/../config/web.php'); $application = new yii\web\Application ( $config ); ob_start (); $application->run (); $html = ob_get_contents (); ob_end_clean (); echo $html;
$_GET = [ 'code' => 'EMDV', ];