[Yii2小心肝儿]ArrayHelper之map详解(你不太用的第三个参数)

ArrayHelper::map( $array, $from, $to, $group = null )

map我想大家都使用过,出境频率非常高。

比如下面的场景,有一个博客分类表category.

idname
1张三
2李四

我们现在想把这个分类表放到下拉框里,id作为key,name作为值。 于是我们在视图里写了这样的代码

<?= \yii\helpers\Html::dropDownList('cat_id',null,ArrayHelper::map(Category::find()->all(),'id','name'));?>

这样就可以了,在浏览器上你会看到

<select name="name">
	<option value="1">张三</option>
	<option value="2">李四</option>
</select>

诸如此类的:我们可以通过map方法将一个结果集或多维数组每项的2个字段抽取出来,一个作为key、一个作为value,重新组成一个数组作为结果返回。

到这里map已经很方便,好吧,我们再来说说第三个函数$group,这是一个可选参数,它能实现类似于sql的group by分组功能。

看例子~~~~,这是一个小组的成员表person。

idrealnamesex
1张三boy
2李四boy
3王五boy
4小三gril

我们想做这样一件事情,首先按照性别分组,每组里分别是一个人的姓名信息,通过map能轻易实现。

<?= ArrayHelper::map($persons,'id','realname','sex');

于是你看到了这样的结果

[
	'boy'=>[1=>'张三',2=>'李四',3=>'小五'],
	'girl'=>[4=>'小三'],
]

这就是map函数。

转载于:https://my.oschina.net/abei2017/blog/830877

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的登录功能的实现。 首先,你需要创建一个控制器(Controller)来处理登录操作。在控制器里,你需要定义两个动作(Action),一个用于显示登录表单,一个用于提交登录表单并验证用户身份。 ```php <?php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\User; use app\models\LoginForm; class SiteController extends Controller { public function actionLogin() { $model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack(); } else { return $this->render('login', [ 'model' => $model, ]); } } public function actionLogout() { Yii::$app->user->logout(); return $this->goHome(); } } ``` 在上面的代码中,`actionLogin()` 方法用于显示登录表单和处理提交表单的逻辑,`actionLogout()` 方法用于注销当前用户。 接下来,你需要创建一个模型(Model)来表示用户信息和处理用户登录。 ```php <?php namespace app\models; use Yii; use yii\base\Model; class LoginForm extends Model { public $username; public $password; public $rememberMe = true; private $_user = false; public function rules() { return [ // username and password are both required [['username', 'password'], 'required'], // rememberMe must be a boolean value ['rememberMe', 'boolean'], // password is validated by validatePassword() ['password', 'validatePassword'], ]; } public function attributeLabels() { return [ 'username' => '用户名', 'password' => '密码', 'rememberMe' => '记住我', ]; } public function login() { if ($this->validate()) { return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0); } else { return false; } } public function getUser() { if ($this->_user === false) { $this->_user = User::findByUsername($this->username); } return $this->_user; } public function validatePassword($attribute, $params) { if (!$this->hasErrors()) { $user = $this->getUser(); if (!$user || !$user->validatePassword($this->password)) { $this->addError($attribute, '用户名或密码错误'); } } } } ``` 在上面的代码中,`LoginForm` 模型包含了用户登录所需的相关信息,包括用户名、密码和记住我选项。`rules()` 方法定义了表单数据的验证规则,`login()` 方法用于验证用户身份并实现登录逻辑,`getUser()` 方法用于获取用户信息,`validatePassword()` 方法用于验证用户密码是否正确。 最后,你需要创建一个视图(View)来显示登录表单。在视图里,你需要使用 Yii2 的 ActiveForm 组件来生成表单元素,并且使用 Yii2 提供的 $model 变量来绑定模型和表单元素。 ```php <?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; $this->title = '登录'; ?> <div class="site-login"> <h1><?= Html::encode($this->title) ?></h1> <p>请填写以下信息登录:</p> <?php $form = ActiveForm::begin([ 'id' => 'login-form', 'layout' => 'horizontal', 'fieldConfig' => [ 'template' => "{label}\n<div class=\"col-sm-3\">{input}</div>\n<div class=\"col-sm-8\">{error}</div>", 'labelOptions' => ['class' => 'col-sm-1 control-label'], ], ]); ?> <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> <?= $form->field($model, 'password')->passwordInput() ?> <?= $form->field($model, 'rememberMe')->checkbox([ 'template' => "<div class=\"col-sm-offset-1 col-sm-3\">{input} {label}</div>\n<div class=\"col-sm-8\">{error}</div>", ]) ?> <div class="form-group"> <div class="col-sm-offset-1 col-sm-11"> <?= Html::submitButton('登录', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?> </div> </div> <?php ActiveForm::end(); ?> </div> ``` 在上面的代码中,使用了 Yii2 的 ActiveForm 组件来生成表单元素,并且使用了 Bootstrap 的样式。`$model` 变量用于绑定模型和表单元素。 这就是一个简单的登录功能的实现了。当用户填写登录表单并提交后,控制器会调用模型来验证用户身份,如果验证通过,则用户登录成功,否则会显示错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值