2015-12-10 12:52:40 4876次浏览 2条回答 0 悬赏 100 金钱

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;
    }

}
  • 回答于 2015-12-10 13:37 举报
    class Test extends ActiveRecord {
        public $newFields;
        public function fields(){
            $fields = parent::fields();
            $fields['newFields'] = function($model){
                // 这里要使用控制器中的$param进行运算
            } 
        }
    }
    
  • 回答于 2015-12-10 17:17 举报

    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 ......
            } 
        }
    }
    
    
    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
trylife
总监

trylife Beijing

注册时间:2015-03-26
最后登录:2020-12-07
在线时长:51小时55分
  • 粉丝39
  • 金钱1626
  • 威望40
  • 积分2536

热门问题