yii2 ActiveForm widget 二级菜单
创建 backend\widgets\device_address\Device_address
文件
并在 视图页面引入
<?= $form->field($model, 'address_0',[
'template'=>"{input}"
])->widget('backend\widgets\device_address\Device_address',[
'form'=>$form,
// 'address_X'=>$model->address_0,
'model'=>$model,
]) ?>
backend\widgets\device_address\Device_address.php
继承 yii\widgets\InputWidget;
创建变量
<?php
namespace backend\widgets\device_address;
use Yii;
use yii\widgets\InputWidget;
use common\models\wechat\Attachment;
use yii\base\Widget;
use common\models\wechat\AttachmentNews;
use common\helpers\{StringHelper,ArrayHelper};
use common\helpers\Html;
use common\school\School_help; //校枚举参数
use common\models\school\device\SchoolDeviceCampus;
/**
* Class Select
* @package backend\widgets\selector
* @author lj
*/
class Device_address extends InputWidget
{
/**
* 模型
*
* @var array
*/
public $model;
public $school_id;
public $Campus;
/**
* 校区
*
* @var array
*/
public $address_0 = 'address_0';
public $address_1 = 'address_1';
/**
* 表单
* @var
*/
public $form;
public function init()
{
parent::init();
$this->school_id = School_help::SchoolID(); //当前所属学校
$this->Campus = ArrayHelper::array_to_one(SchoolDeviceCampus::find()->asArray()->select('id,campus')->where(['school_id'=>$this->school_id])->andWhere(['pid'=>0])->all(),'id','campus');
}
public function run()
{
return $this->render('select',[
'form' => $this->form,
'model' => $this->model,
'address_0' => $this->address_0,
'address_1' => $this->address_1,
'school_id' => $this->school_id,
'Campus' => $this->Campus,
'url'=>Yii::$app->urlManager->createUrl(['/device_address/index']),
]);
}
}
上面用了个 Yii::$app->urlManager->createUrl(['/device_address/index'])
我们 controllerMap
创建控制器地图
这个用于 二级菜单 ajax
Device_addressController 内容
<?php
namespace backend\widgets\device_address;
use yii;
use yii\web\Response;
use common\helpers\Html;
use common\school\School_help; //校枚举参数
use common\models\school\device\SchoolDeviceCampus;
use common\helpers\{StringHelper,ArrayHelper};
/**
* Class \device_addressController
* @package backend\widgets\\device_address
* @author lj
*/
class Device_addressController extends yii\web\Controller
{
/**
* 行为控制
*/
public function behaviors()
{
return [
'access' => [
'class' => yii\filters\AccessControl::class,
'rules' => [
[
'allow' => true,
'roles' => ['@'],// 登录
],
],
],
];
}
/**
* 首页
*/
public function actionIndex($pid, $type_id = 0,$school_id)
{
Yii::$app->response->format = Response::FORMAT_JSON;
$data =SchoolDeviceCampus::find()->asArray()->select('id,campus')->where(['school_id'=>$school_id])->andWhere(['pid'=>$pid])->all();
return ArrayHelper::array_to_one($data,'id','campus');
}
}
视图 调用 Device_addressController
返回 数据
<?php
use common\helpers\Html;
use yii\helpers\Url;
?>
<div class="form-group field-schooldevicedeviceall-administrator has-success">
<div class="col-sm-2 text-right">
<label class="control-label" for="schooldevicedeviceall-administrator">地址</label>
</div>
<div class="col-sm-4">
<?= $form->field($model, $address_0,[
'template'=>"{input}",
])->dropDownList($Campus,['prompt' => '-- 请选校区 --','onchange'=>"widget_provinces(this,1,$school_id)",]); ?>
<div class="help-block">
</div>
</div>
<div class="col-sm-5">
<?= $form->field($model, $address_1,[
'template'=>"{input}"
])->dropDownList([0,1,2,3,4],['prompt' => '-- 请选地址 --','se2'=>1]); ?>
<div class="help-block">
</div>
</div>
</div>
<script>
function widget_provinces(obj, type_id,school_id) {
var pid = $(obj).val();
var str = "<option value='0'>-- 请选地址 --</option>"
$.ajax({
type :"get",
url : "<?= $url; ?>",
dataType : "json",
data : {type_id:type_id, pid:pid,school_id:school_id},
success: function(data){
$.each(data,function(x,y){
console.log(x)
str +="<option value='"+x+"'>"+y+"</option>";
})
$("select[se2='1']").html(str)
str= ''
}
});
}
</script>