我正在学习yii框架并阅读了他们的文档.
但我仍然不明白这些组件.这些是什么.他们谈论组件事件和行为.
有人可以为我解释这些条款,并给我一个组件,其事件和行为可能是什么的真实应用示例?
会有帮助的!
我正在使用Yii ajaxSubmitButton()来提交表单.此外,我已将'enableAjaxValidation'参数设置为true以验证相应的文本框.
我能做什么:
问题是我不知道如何在单击提交按钮时执行字段验证,如果验证了模型,则在客户端执行部分渲染.
如果我覆盖ajaxSubmitButton中的'success'事件,我会得到部分渲染,但我无法维护模型验证.
有帮助吗?
编辑
谢谢回复,
已设置validateOnSubmit标志,如果未设置"成功"事件,则将正确验证模型.
当ajaxSubmitButton是这样的:
<?php echo CHtml::ajaxSubmitButton( 'Send',
CHtml::normalizeUrl(array('site/ajaxIndexSubmit')),
array(
'error'=>'js:function(){
alert(\'error\');
}',
'beforeSend'=>'js:function(){
alert(\'beforeSend\');
}',
'success'=>'js:function(data){
alert(\'success, data from server: \'+data);
}',
'complete'=>'js:function(){
alert(\'complete\');
}',
//'update'=>'#where_to_put_the_response',
)
);
?>
Run Code Online (Sandbox Code Playgroud)
alert('success')将打印对应于模型验证的字符串.一旦我有了这个字符串,必须在客户端调用什么逻辑?
覆盖"成功"javascript处理程序的原因是从服务器接收部分呈现,与模型验证不同.我想要两件事:验证和部分渲染.
如何迭代dataprovider对象?我想访问返回的每行的'name'字段并构建一个列表.你能帮我吗?
表/模型的表结构 categories
CREATE TABLE IF NOT EXISTS `categories` (
`idCategory` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
PRIMARY KEY (`idCategory`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=55 ;
Run Code Online (Sandbox Code Playgroud)
*我的控制器类别中的功能*
$names = array();
public function returnCategoryNames()
{
$dataProvider= new CActiveDataProvider('Categories');
$dataProvider->setPagination(false);
$count = $dataProvider->totalItemCount();
for($i = 0; $i < $count; $i++){
// this is where I am lost...
$myname = $dataProvider->data[$i]->name;
array_push($names, $myname);
}
return $names;
}
Run Code Online (Sandbox Code Playgroud) 这是表单的代码.我想为提交按钮添加一个类,并为所有文本字段添加内联样式.我怎么能这样做?
例如在视图源中看起来像这样我想像这样编辑
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<div class="row">
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->error($model,'password'); ?>
<p class="hint">
Hint: You may login with <kbd>demo</kbd>/<kbd>demo</kbd> or <kbd>admin</kbd>/<kbd>admin</kbd>.
</p>
</div>
<div class="row rememberMe">
<?php echo $form->checkBox($model,'rememberMe'); ?>
<?php echo $form->label($model,'rememberMe'); ?>
<?php echo $form->error($model,'rememberMe'); ?>
</div>
<div class="row …Run Code Online (Sandbox Code Playgroud) 我开始使用yiibooster在gridview简单添加上进行就地编辑
$columns[] = array(
'name' => $field->name,
'value' => array($this, 'cellValue'),
'class' => 'bootstrap.widgets.TbJEditableColumn',
'jEditableOptions' => array(
'type' => 'text',
// very important to get the attribute to update on the server!
'submitdata' => array('field_id'=>$field->id),
'width' => '100%',
'placeholder' => Yii::t('sms', 'click for edit'),
)
);
Run Code Online (Sandbox Code Playgroud)
如何以相同的方式编辑表头?
编辑: 我的解决方案.这个对我有用. http://pastebin.com/0NzHMgEr
假设我的模型User与自身有多对多的关系,命名为friends.所以$user->friends(或$model->friends在视图中)给我一个User对象数组.我想将朋友显示为gridview.但CGridView数据作为dataProvider对象.谷歌搜索找到了将模型对象数组转换为dataProvider对象的方法,如下所示.
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'gridUser',
'dataProvider' => new CArrayDataProvider($model->friends, array()),
));
Run Code Online (Sandbox Code Playgroud)
现在使用这个我得到一个错误
属性"User.id"未定义.
UPDATE
public function relations()
{
return array(
'friends' => array(self::MANY_MANY, 'User', 'friendship(user_id, friend_id)'),
);
}
Run Code Online (Sandbox Code Playgroud) 我正在与Yii合作,必须为cron实现一个脚本.我有一个脚本文件,它只调用Yii并启动我的php脚本文件.
在此之前一切都很好.如果我正在更新php脚本,Cron就会继续执行旧脚本.
重启cron-service,重启服务器等没有帮助.我也卸载了cron并再次安装它,但没有任何改变.他仍然执行这个php脚本的旧版本.
任何人都知道什么是错的或我能做些什么来解决这个问题?我正在使用Ubuntu 12.04.
编辑:
该cronjob脚本正在运行:
#!/bin/bash
cd ../www/protected/ ./yiic Cron ProcessPayments
Run Code Online (Sandbox Code Playgroud)
php脚本
class CronCommand extends CConsoleCommand {
public function actionProcessPayments() {
...
}}
Run Code Online (Sandbox Code Playgroud)
这有效,但我对此脚本所做的任何更改都会被Cron忽略.而现在我正是在这一点上:他执行两者.我的旧版本和新版本.我从来没有被某些东西弄糊涂.
使用Yii 2 basic不是高级版本.
我有一个crud管理员身份验证系统.其中只存储数据库中的id,用户名和密码.当用户登录时,如果用户名和密码正确,则会登录.
但是我现在想要使这些密码安全,所以我想盐和散列它们.这是我发现难以做到的部分或更多,所以在哪里放东西.
第1部分: 我有一个AdminController,它与我的用户模型Create.php页面一起. 第2部分: 我有一个siteController,它与LoginForm模型和login.php页面一起登录.
我将首先讨论第一部分,因为它显然必须在这里实际生成一个哈希密码.
AdminController:
public function actionCreate()
{
$model = new User();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
Run Code Online (Sandbox Code Playgroud)
user.php的
<?php
namespace app\models;
use yii\base\NotSupportedException;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
use yii\data\ActiveDataProvider;
/**
* User model
*
* @property integer $id
* @property string $username
* @property string $password
*/
class User extends ActiveRecord implements IdentityInterface
{
/**
* …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用Yii框架(这是一个很棒的!)并且正在使用PHP Storm 5.
我已经将testdrive文件与Yii框架分开了,只是更改了index.php文件中的路径,这些路径都可以工作,但是我现在如何获得代码完成并且IDE能够识别所有yii系统类?
我用Google搜索并阅读了大量内容,但这些内容非常令人困惑,并且没有得到很好的解释.那里的任何人都可以给我几个步骤吗?
谢谢
编辑
我想通了,很容易.您所要做的就是转到文件→设置→项目设置→PHP→PHP主页→添加.并在yii中添加到框架文件夹的路径.
我对Yii比较陌生.
我对原始SQL很有信心,但在ORM方面仍然有点迷失.所以这可能是一个虚假的问题.
我已经检索了所有必要的记录,例如CDbCriteria:
$criteria = new CDbCriteria(array(
'select' => 'sum(items) as items',
// 'condition' => 't.items > 0 and order.storage = "'Product::STORAGE_LOCAL . '"',
'condition' => 't.items > 0 and order.storage = "' . Product::STORAGE_LOCAL . '"',
'order' => 'sum(items) DESC',
'with' => array(
'product' => array(
'select' => 'code, title, producer, local_rest',
**// 'select' => 'code, title, producer, sum(local_rest) as local_rest',**
'group' => 'product.code',
)
),
'join' => 'inner join `order` `order` on `t`.`order_id` = `order`.`id`',
// …Run Code Online (Sandbox Code Playgroud)