标签: yii2-model

Yii2,带属性名称的自定义验证消息

在Login窗体中,我需要glyphicon-remove在每个验证消息的末尾都有相应字段名称的图标.所以我在下面的代码中使用了Login model.

['email', 'required', 'message' => 'Email cannot be blank<span class="glyphicon glyphicon-remove"></span>'],
['password', 'required', 'message' => 'Password cannot be blank<span class="glyphicon glyphicon-remove"></span>']
Run Code Online (Sandbox Code Playgroud)

而不是上面的代码,有没有任何可能的方法来使用类似下面的代码.

[['email', 'password'], 'required', 'message' => $attribute.' cannot be blank<span class="glyphicon glyphicon-remove"></span>']
Run Code Online (Sandbox Code Playgroud)

上述代码的思想是为每个字段动态获取相应的字段名称.

请只做那些需要的.谢谢.

更新

这里我使用的HTML代码(<span class="glyphicon glyphicon-remove"></span>)通过使用正确输出encode=>'false'.但我需要的是不是为每个字段单独定义,而是需要为所有字段共同定义.

php yii2 yii2-model yii2-validation

12
推荐指数
1
解决办法
2万
查看次数

Yii2:如何在ActiveRecord中设置默认属性值?

这似乎是一个微不足道的问题,但是我能想到的所有明显的解决方案都有其自身的缺陷.

我们想要的是能够仅为新记录设置任何默认的ActiveRecord属性值,使其在验证之前和验证期间可读,并且不会干扰用于搜索的派生类.

一旦我们实例化类,就需要设置和准备(new MyModel)->attr默认attr值,以便返回默认值.

以下是一些可能性和问题:

  • A)MyModel超控的init()方法和分配默认值时isNewRecord,像这样是正确的:

    public function init() {
        if ($this->isNewRecord) {
            $this->attr = 'defaultValue';
        }
        parent::init();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    问题:搜索.除非我们明确地取消设置我们的默认属性MySearchModel(非常容易出错,因为它太容易忘记),这也会在调用search()派生MySearchModel类之前设置值并干扰搜索(该attr属性已经设置,因此搜索将返回结果不正确).在Yii1.1中,这是通过在调用unsetAttributes()之前调用来解决的search(),但是在Yii2中不存在这样的方法.

  • B)MyModel超控的beforeSave(),像这样的方法:

    public function beforeSave($insert) {
        if ($insert) {
            $this->attr = 'defaultValue';
        }
        return parent::beforeSave();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    问题:未在未保存的记录中设置属性.(new MyModel)->attrnull.更糟糕的是,即使是依赖于此值的其他验证规则也无法访问它,因为验证之后beforeSave()会调用它.

  • C)为了确保在验证期间值可用,我们可以改写beforeValidate()方法并在其中设置默认值,如下所示: …

activerecord yii2 yii2-model yii2-validation

12
推荐指数
3
解决办法
3万
查看次数

Yii2仅从相关模型中选择几列

在控制器我有:

public function actionGetItems()
{
    $model = new \app\models\WarehouseItems;
    $items = $model->find()->with(['user'])->asArray()->all();
    return $items;
}
Run Code Online (Sandbox Code Playgroud)

在WarehouseItem模型中,我有标准(由gii创建)关系声明:

public function getUser()
{
    return $this->hasOne('\dektrium\user\models\User', ['user_id' => 'user_id']);
}
Run Code Online (Sandbox Code Playgroud)

如何控制从"用户"关系中获得哪些列数据?我目前得到的所有列都不好,因为数据以JSON格式发送到Angular.现在我必须通过$ items循环,并将我不想发送的所有列归档.

yii2 yii2-model

9
推荐指数
1
解决办法
2万
查看次数

model-> save()在Yii2中不起作用

以前,我没有使用$model->save()函数来插入或更新任何数据.我只是createCommand()用来执行查询,它正在成功运行.但是,我的团队成员要求我避免createCommand()和使用$model->save();

现在,我开始清理我的代码,问题$model->save();对我不起作用.我不知道我错在哪里.

UsersController.php(控制器)

<?php
namespace app\modules\users\controllers;
use Yii;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\swiftmailer\Mailer;
use yii\filters\AccessControl;
use yii\web\Response;
use yii\widgets\ActiveForm;
use app\modules\users\models\Users;
use app\controllers\CommonController;

class UsersController extends CommonController 
{
    .
    .

    public function actionRegister() {
    $model = new Users();

        // For Ajax Email Exist Validation
   if(Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())){
     Yii::$app->response->format = Response::FORMAT_JSON;
     return ActiveForm::validate($model);
   } 

   else if ($model->load(Yii::$app->request->post())) {
      $post = Yii::$app->request->post('Users');
      $CheckExistingUser = $model->findOne(['email' => $post['email']]);

      // Ok. Email Doesn't …
Run Code Online (Sandbox Code Playgroud)

php yii2 yii2-basic-app yii2-model

9
推荐指数
4
解决办法
5万
查看次数

如何在Yii2 gridview中连接两个表并获取值

我正在使用Yii2 gridview小部件来显示数据.

我正在使用两个名为messagemessage_trigger的表.

消息表列中object_model,Object_id.

message_trigger中,列是object_id,object_name.

网格从表消息中获取值.所以网格字段是Object_model,Object_id.

现在我的问题是我需要表现出Object_name从表格message_trigger基础上,object_id从表中的消息.

在我的形式中,我使用了这样的网格

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'object_model',
        'object_id',
        ['class' => 'yii\grid\ActionColumn', 'template' => '{view} {update} {delete} '],
    ],
]); ?>
Run Code Online (Sandbox Code Playgroud)

在我使用过的模型中

public function search($params){
    $query = AlertTrigger::find()->where(['alert_id'=>$params['id']])->andWhere(['!=','status',2]);
    $dataProvider = new ActiveDataProvider([
        'query' => …
Run Code Online (Sandbox Code Playgroud)

gridview yii2 yii2-model

8
推荐指数
1
解决办法
2万
查看次数

使用Yii2中的关系连接多个表

我试图通过使用关系通过Kartik GridView小部件列出一些数据yii2.我有这些表

staffs

CREATE TABLE IF NOT EXISTS `staffs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(250) CHARACTER SET utf8 DEFAULT NULL,
  `department_id` int(11) DEFAULT NULL,
  `designation_id` int(11) DEFAULT NULL,
  `username` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `emailid` varchar(250) CHARACTER SET utf8 DEFAULT NULL,
  `staffrights` tinyint(2) DEFAULT '0',
  `staffstatus` tinyint(2) DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
designations

CREATE TABLE IF NOT EXISTS `designations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `designname` varchar(150) NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

php yii2 yii2-model

8
推荐指数
1
解决办法
2660
查看次数

获取布尔值为true或false,而不是1或0

我正在使用MySql数据库,因此我在db模式中将列类型定义为Tinyint(1).

在我的ActiveRecord中,我设置了布尔验证器.保存逻辑按预期工作.

我现在想要的是,当我调用Yii2 REST服务时,返回布尔字段为true或false而不是1或0,因为在客户端,框架带有严格的比较(===),1与true不同.

当然,我可以在发送内容之前手动覆盖该值,或者在将其加载到模型之前在客户端上覆盖该值,但我希望有一个更清晰的解决方案.

yii2 yii2-model

6
推荐指数
1
解决办法
1719
查看次数

将 SQL 查询计算出的字段添加到 Yii2 ActiveRecord 模型中

我正在编写代码以返回位于指定区域内并接近某个纬度和经度的位置列表。数据库布局是有一个包含企业的 Location 表、一个定义区域的 Region 表(UrlName 是标识区域的 slug),以及一个 regionLocation 表,将区域映射到位置。

SQL 查询非常繁琐,但它计算了一个名为“距离”的虚拟列,我希望在返回的模型中可以访问该列。

这是出现在我的位置模型中的代码的缩短版本:

        public static function getByRegionAndLatLong( $regionName, $lat, $long ) {

        $sql = "SELECT
            `Location`.`LocationId`,
            `Location`.`Latitude`,
            `Location`.`Longitude`,
                    (
                    3959 * acos (
                    cos ( radians( :Latitude ) )
                    * cos( radians( latitude ) )
                    * cos( radians( longitude ) - radians( :Longitude ) )
                    + sin ( radians( :Latitude ) )
                    * sin( radians( latitude ) )
                    )
                  ) AS Distance
                FROM Location
                    LEFT JOIN RegionLocation RL
                    ON RL.LocationId = …
Run Code Online (Sandbox Code Playgroud)

yii2 yii2-model

6
推荐指数
1
解决办法
2915
查看次数

如何在Yii2的动态模型中添加自定义验证功能?

我在yii2基本应用程序中使用动态模型。

以下是我的动态模型的代码。

$model = new \yii\base\DynamicModel([
        'role', 'from_rm', 'to_rm', 'user1_subdistrcts'
    ]);
    $model->addRule(['user1_subdistrcts', 'role'], 'required', ['message' => "Please select this field."])
->addRule(['from_rm'], 'checkRm');
Run Code Online (Sandbox Code Playgroud)

在这里,我愿意为用户自定义验证功能'checkRm'表单from_rm字段,我也已经定义了checkRm函数,如下所示:

public function checkRm($from_rm, $params)
{
    $this->addError($from_rm, 'Please Select Regional Manager.');
}
Run Code Online (Sandbox Code Playgroud)

但是当我提交表格时我发现错误Class CheckRm没找到

现在,请帮助如何在动态模型中使用自定义验证。

我也试过了whenwhenClient但条件也没用

php yii2 yii2-basic-app yii2-model

6
推荐指数
1
解决办法
2815
查看次数

如何在 Yii2 表单错误摘要中显示 HTML 标签

我试图在登录时显示错误消息中的链接,但它不起作用。

验证中的错误消息LoginForm

$this->addError($attribute, 'Your account has been disabled. <a href=""> Enable It</a>');
Run Code Online (Sandbox Code Playgroud)

login.php(视图)中:

<?= $form->errorSummary($model); ?>
Run Code Online (Sandbox Code Playgroud)

我试过如下,但不工作:

 <?= $form->errorSummary($model,['errorOptions' => ['encode' => false,'class' => 'help-block']]); ?>
Run Code Online (Sandbox Code Playgroud)

我得到以下输出而不是渲染a标签:

错误总结

yii2 yii2-advanced-app yii2-basic-app yii2-model yii2-validation

6
推荐指数
1
解决办法
7479
查看次数