ZUL*_*ULI 1 yii2 yii2-advanced-app
告诉我如何使手机以可读的方式输出?
它在数据库中存储为1234567890,但您需要显示用户 - (123) 456-78-90。
我不想建造一个花园,显然,通常已经有现成的解决方案。
在控制器中
public function actionShowPhone()
{
$phone = "1234567890";
return $this->render('show-phone', ['phone' => $phone,]);
}
Run Code Online (Sandbox Code Playgroud)
在查看show-phone.php
<?= Html::encode($phone) ?>
Run Code Online (Sandbox Code Playgroud)
如果您想格式化内部的电话号码,ActiveForm可以\yii\widgets\MaskInput按以下方式使用
<?=
$form->field($model, 'landline_phone')->widget(\yii\widgets\MaskedInput::className(), [
'mask' => '(999)-999-99-99'
]);
?>
Run Code Online (Sandbox Code Playgroud)
或没有ActiveForm
echo \yii\widgets\MaskedInput::widget([
'name' => 'phone',
'mask' => '(999)-999-99-99',
]);
Run Code Online (Sandbox Code Playgroud)
注意:保存phone字段时,您必须仅将其保存为数据库中的数字,这样1234567890在保存之前您可以$this->landline_phone= preg_replace('/[^0-9]+/', '', $this->landline_phone);在beforeSave().
Extending the \yii\i18n\Formatter
但是,如果您想以上述格式将电话号码打印为文本,那么一个好方法是扩展yii\i18n\Formatter并创建一个自定义组件/帮助程序common\components\,或者app\components\使用以下代码。
注意:相应地更改namespace班级的
<?php
namespace common\components;
use yii\i18n\Formatter;
class FormatterHelper extends Formatter {
public function asPhone($value) {
return preg_replace("/^(\d{3})(\d{3})(\d{2})(\d{2})$/", "($1)-$2-$3-$4", $value);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在common\config\main.php或app\config\web.php下添加以下内容components。
'formatter' => [
'class' => '\common\components\FormatterHelper',
'locale' => 'en-US',
'dateFormat' => 'yyyy-MM-dd',
'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss',
'decimalSeparator' => '.',
'thousandSeparator' => ',',
'currencyCode' => 'USD'
],
Run Code Online (Sandbox Code Playgroud)
然后你可以像下面一样使用它
echo Yii::$app->formatter->asPhone('123456789')
Run Code Online (Sandbox Code Playgroud)
它将输出以下文本
(123)-456-78-90
Run Code Online (Sandbox Code Playgroud)Using \yii\widgets\MaskedInputAssets
另一种最简单的方法是注册MaskedInputAssets使用RobinHerbots/Inputmask捆绑的可用并使用 javascript 来屏蔽文本
<?php
\yii\widgets\MaskedInputAsset::register($this);
$js = <<<SCRIPT
var selector = document.getElementById("mask");
var im = new Inputmask("(999)-999-99-99");
im.mask(selector);
SCRIPT;
// Register tooltip/popover initialization javascript
$this->registerJs ( $js , \yii\web\View::POS_READY);
?>
<div id="mask">
1234567890
</div>
Run Code Online (Sandbox Code Playgroud)