我在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没找到
现在,请帮助如何在动态模型中使用自定义验证。
我也试过了when
,whenClient
但条件也没用
我试图在登录时显示错误消息中的链接,但它不起作用。
验证中的错误消息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
这是我的网格视图,我从类更改actionColumn
为:
[ 'format' => 'html',
'contentOptions'=>['style'=>'width: 5px;'],
'value' => function($model) {
if($model->id == Yii::$app->user->identity->id) {
return Html::a('<i class="glyphicon glyphicon-share-alt"></i>').' '.
Html::a('<i class="glyphicon glyphicon-pencil"></i>', ['update', 'id' => $model->id]).' '.
Html::a('<i class="glyphicon glyphicon-trash"></i>', ['delete', 'id' => $model->id], ['data' => ['confirm' => 'Do you really want to delete this element?','method' => 'post']]);
}
return '';
},
],
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误。
Method Not Allowed (#405)
Method Not Allowed. This url can only handle the following request methods: POST.
Run Code Online (Sandbox Code Playgroud)
当我actionColumn
再次更改它时,它可以正常工作,但是我更改了代码,这只是给我一个错误。
我是Yii2的新手.请帮我实现这个目标.我想知道如何在yii2中创建absoluteurl.我已经尝试了下面给出的代码,但我想要一些不同的东西.
echo Yii::$app->urlManager->createAbsoluteUrl(['site/confirm', 'id' => $user->id,'code' => $user->token,'&']);
output is http://car-rental.demoinja.com/site/confirm/69?code=275a9253dfc81efa47be4fdf1fc6a927&1=%26
Run Code Online (Sandbox Code Playgroud)
但我想要这样的网址
http://car-rental.demoinja.com/site/confirm/?id=69&code=275a9253dfc81efa47be4fdf1fc6a927
Run Code Online (Sandbox Code Playgroud) 我正在使用 Yii2 为客户端创建静态页面。我正在使用 yii2,因为客户端有一些其他要求,以便稍后扩展网络。我使用 Yii2 Basic 应用程序。yii2 basic 有默认页面,如 about、contact 等。启用漂亮 url 后这些页面的 url 是
www.example.com/about
Run Code Online (Sandbox Code Playgroud)
等等
现在我需要创建页面
“xyz.php”
在子目录下像
“ABC”
. 所以我需要我的网址www.example.com/abc/xyz
我如何实现这一目标?被告知我是一个学习者,我遵循了 url 规则,帮助者但没有找到一个强有力的解决方案。
我正在尝试访问视图文件上的变量,Gridview
但它抛出了it should be array but null given
我在$totalDays
视图文件顶部声明的错误,我正在使用它,Gridview
如下所示
[
'attribute' => 'class_id',
'format' => 'raw',
'label' => "Class Date",
'value' => function ($model) {
array_push($totalDays,$model->class->date);
return $model->class->date;
},
'footer'=> '<span>Total Days</span>',
],
Run Code Online (Sandbox Code Playgroud)
但它抛出以下错误
array_push() 期望参数 1 是数组,给定 null
在我的基本应用项目中,我正在尝试集成注册表单,但出现此错误:
无效的验证规则:规则必须同时指定属性名称和验证器类型。
我的代码在这里。
注册表格.php
<?php
namespace app\models;
use yii\base\Model;
use app\models\User;
/**
* Signup form
*/
class SignupForm extends Model
{
public $user_fname;
public $user_email;
public $user_password_hash;
/**
* @inheritdoc
*/
public function rules()
{
return [
[['user_fname','user_email', 'user_password_hash'], 'required'],
// rememberMe must be a boolean value
['user_password_hash','match','pattern'=>'$\S*(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$','message'=>'Password must have atleast 1 uppercase and 1 number '],
[['user_password_hash'],'string','min'=>6],
//email validation
['user_email','email']
[['user_email'], 'string', 'max' => 255],
[['user_fname'], 'string', 'max' => 45],
];
}
/**
* Signs user up.
*
* …
Run Code Online (Sandbox Code Playgroud) 我了解 ActionColumn 按钮的可见性可以这样控制:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'title',
'body:ntext',
// ['class' => 'yii\grid\ActionColumn'],
[
'class' => 'yii\grid\ActionColumn',
'visibleButtons' =>
[
'update' => Yii::$app->user->can('updatePost'),
'delete' => Yii::$app->user->can('updatePost')
]
],
],
]);
?>
Run Code Online (Sandbox Code Playgroud)
我已经创建了 RBAC 授权,以及一个基于 yii2 文档的 AuthorRule Rule 类
http://www.yiiframework.com/doc-2.0/guide-security-authorization.html
在 roleParams 的情况下,我已经实现了如下(在视图模板中):
if (\Yii::$app->user->can('updatePost', ['post' =>$model]){
//if the post is created by current user then do this
}
Run Code Online (Sandbox Code Playgroud)
如何找出 GridView 小部件中的模型或至少 id 以便我执行以下操作:
'visibleButtons' =>
[
'update' => …
Run Code Online (Sandbox Code Playgroud) 我在主查询中有一个子查询,如下所示:
$subquery = (new Query())->select('COUNT(project_sup_id)')
->from('project_supervisors AS sup')
->where(['AND','sup.project_ref_id = p.project_id']);
$uQuery =(new Query())->select(['project_id','supcount' => $subquery])
->from('projects AS p')
->join('LEFT JOIN','project_supervisors AS sup','sup.project_ref_id = project_id')
->andWhere('IF(supcount>0, sup_project_status=1, project_status=1)');
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据逻辑编写 where 条件,即,如果从子查询获得的计数大于零,则 where 条件必须为sup_project_status=1
else project_status=1
。在普通的Mysql中,很容易在where里面写if条件,但在yii2中我不明白如何写。
假设我的申请路径是: -
http://www.example.com/index.php?r=dashboard/event/view
Run Code Online (Sandbox Code Playgroud)
我创建了一个新的控制器,我想将URL更改为漂亮的URL.
新控制器的默认URL
http://www.example.com/index.php?r=newcontroller/view?id=23&name=urlpretty
Run Code Online (Sandbox Code Playgroud)
我想将上面的URL设置为漂亮的URL,例如
http://www.example.com/23/sampleprettyurl
Run Code Online (Sandbox Code Playgroud)
但我不想将完整的应用程序URL路径更改为漂亮的URL.我的其他控制器路径/ URL应该正常工作.
提前致谢