怎么在controller里把参数传给model 的function fileds() [ 2.0 版本 ]
Controller.php
<?php
namespace frontend\controllers;
use frontend\models\Test;
use yii\rest\Controller;
class TestController extends Controller {
public function actionIndex($coordinates){
// 要把$coordinates传到Model
return Test::find()->all();
}
}
Model.php
namespace frontend\models;
use yii\db\ActiveRecord;
/**
*
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
INSERT INTO `test` (`id`, `title`) VALUES
(1, 'hi');
* Class Test
* @package frontend\models
*/
class Test extends ActiveRecord {
public $coordinates;
public $newField;
public function rules()
{
return [
[['title'], 'required'],
[['title'], 'string', 'max' => 250]
];
}
public function fields()
{
$fileds = parent::fields();
$fileds['newField'] = function($model,$field){
// 这里要用到Controller里的$coordinates
return implode(',',$this->coordinates);
};
return $fileds;
}
}
共 2 个回答
-
1、最直接的办法 :
在
fields()
中的匿名函数内, 使用下面语句即可获取class Test extends ActiveRecord { public function fields(){ $fields = parent::fields(); $fields['newFields'] = function($model){ // 这里使用 Yii::$app->controller->actionParams["coordinates"]; } } }
当然 这种方法有一定局限性, 如果要使用的数据不属于
actoinParams
怎么办呢?当然你可以给对应的
controller
加属性来解决...但总感觉有点奇技淫巧的feel. 不合套路
2、你可以给对应的模型 加上静态属性
class Test extends ActiveRecord { public static $coordinates; //加上静态属性, 在控制器进行赋值 public function fields(){ $fields = parent::fields(); $fields['newFields'] = function($model){ // 这里使用 $model::$coordinates ...... } } }
luoxiao 觉得很赞
trylife Beijing
注册时间:2015-03-26
最后登录:2020-12-07
在线时长:51小时55分
最后登录:2020-12-07
在线时长:51小时55分
- 粉丝39
- 金钱1626
- 威望40
- 积分2536