Итак, в настоящее время есть эта функция в контроллере, которая вызывается несколько раз.
public function formatFloat($value)
{
return (float)sprintf('%0.6f', $value);
}
Поэтому я пытаюсь использовать геттеры и сеттеры, чтобы я мог просто использовать
$model->$whatever;
и форматирование будет сделано.
В моей модели у меня есть
public function getChargePeak()
{
return $this->charge_peak;
}
public function setChargePeak($value)
{
return $this->charge_peak = (float)sprintf('%0.6f', $value);
}
но когда делаешь
$peak = $model->chargepeak;
var_dump($peak);die;
это все еще возвращается как строка
Если свойство charge_peak хранится в виде строки, и вам нужно использовать float в вашем приложении, вы должны использовать
public function getChargePeak()
{
return floatval($this->charge_peak);
}
В любом случае, вы должны хранить значения согласованным образом при использовании значений в вашем приложении.
Поэтому я предлагаю вам другой шаблон: декоратор и помощники. Вы должны использовать контроллер только для получения данных из запроса, подготовки их к модели и отправки их для просмотра.
Форматирование значений является вспомогательной логикой. Так что создайте новый класс
\ Common \ хелперы \ Number.php
namespace common\helpers;
class Number
{
public static function formatFloat($value)
{
return (float)sprintf('%0.6f', $value);
}
}
Затем создайте декоратор для вашей модели:
namespace common\models\decorators;
class YourModelDecorator
{
/**
* YourModel
*/
private $model;
public function __construct(YourModel $model)
{
$this->model = $model;
}
public function __get($name)
{
$methodName = 'get' . $name;
if (method_exists(self::class, $methodName)) {
return $this->$methodName();
} else {
return $this->model->{$name};
}
}
public function __call($name, $arguments)
{
return $this->model->$name($arguments);
}
public function getChargePeak()
{
return \common\helpers\Number::formatFloat($this->model->charge_peak);
}
}
и отправьте его для просмотра, например:
public function actionView($id)
{
$model = $this->loadModel($id);
$this->render('view', [
'model' => new \common\models\decorators\YourModelDecorator($model)
]);
}