目前项目需要做一个下拉滑动分页,按照正常的分页思路出现了一个问题;就是在滑动的时候,有新的数据出现,分页显示的数据就会重复出现。大家在做下拉滑动拉取数据的时候是怎么做的? 求大神分享思路。
我的猜想是:你在下拉的过程中有新的数据插入,所以下一页的数据会有上一页部分数据。
传分页参数没传过去吧
目前项目需要做一个下拉滑动分页,按照正常的分页思路出现了一个问题;就是在滑动的时候,有新的数据出现,分页显示的数据就会重复出现。大家在做下拉滑动拉取数据的时候是怎么做的? 求大神分享思路。
我的猜想是:你在下拉的过程中有新的数据插入,所以下一页的数据会有上一页部分数据。
传分页参数没传过去吧
各位大神,小弟yii2新手,有个问题请教大家
我的项目中有一个表,几乎其他的所有操作都需要向这个表里插入数据。我想写一个公共的方法,在其他控制器中调用这个方法就行了。
我的菜鸟思路一:为这个表建一个控制器,在控制器里写一个方法。其他控制器调用这个控制器里的方法
我的菜鸟思路二:在helper里写一个公共类,在公共类里写一个插入数据库的方法。然后其他控制器调用helper里的这个方法(这个思路貌似行不通,helper里操作数据库总报错)。
我的思路貌似都比较幼稚,请教各位大神正规的解决方案是什么样子的,多谢多谢。
写一个Model基类,其他数据模型继承它,在基类里写一个公共方法,这样其他继承的模型都可以调用此方法了。
我觉得应该是 写一个controller基类,这个类继承afterAction(),在这里写你要做的操作,然后让需要记录操作的控制器继承自你自定义的基类,即可。
先说我想问什么,现在有一个表格,比如商家登记要卖的商品:
商品名称 商品种类 数量
手机 电子产品 2
电脑 电子产品 1
书籍 书籍 10
这个表单如上已经填写好,现在提交后如何同时写入三条记录到数据库?
并且不一定仅仅是三条,要实现用户点击“添加”按钮就会多一行表单。
我的代码问题在哪里?
控制器:
public function actionRelease()
{
$model = new Seller();
$goods=[new Goods()];
$count = count(Yii::$app->request->post('Goods', []));
for($i = 1; $i < $count; $i++) {
$goods[] = new Goods();
}
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$model->save();
if (Model::loadMultiple($goods, Yii::$app->request->post()) && Model::validateMultiple($goods)) {
foreach ($goods as $good) {
$good->release_date= date('y-m-d',time());
$good->seller_id=$model->id;
$good->save(false);
}
return $this->render('release-confirm');
}
return $this->render('release-wrong');
} else {
// 无论是初始化显示还是数据验证错误
return $this->render('release', ['model' => $model,'goods'=>$goods]);
}
}
视图:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
//use kartik\select2\Select2;
?>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name'); ?>
<?= $form->field($model, 'gender')->dropDownList(['男'=>'男','女'=>'女']) ?>
<?= $form->field($model, 'student_number') ?>
<?= $form->field($model, 'mobile') ?>
<?= $form->field($model, 'if_big')->dropDownList(['有'=>'有','没有'=>'没有']) ?>
<?= $form->field($model, 'if_alipay')->dropDownList(['是'=>'是','否'=>'否']) ?>
<?= $form->field($model, 'if_present')->dropDownList(['是'=>'是','否'=>'否']) ?>
<?= $form->field($model, 'sell_time')->dropDownList(['全天'=>'全天','上午'=>'上午','下午'=>'下午']) ?>
<?php
foreach ($goods as $index => $v) {
echo $form->field($v, "name[]")->label($v->name);
echo $form->field($v, "cate[]")->dropDownList(['书籍'=>'书籍','生活用品'=>'生活用品','电子产品'=>'电子产品','其他'=>'其他'])->label($v->name);
echo $form->field($v, "number[]")->label($v->name);
}
?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
模型数据如下:
<?php
namespace app\models;
use yii\db\ActiveRecord;
/**
* LoginForm is the model behind the login form.
*/
class Goods extends ActiveRecord
{
public static function getDb()
{
return \Yii::$app->db2;
}
/**
* @return array the validation rules.
*/
public function rules()
{
return [
// username and password are both required
[['name', 'cate','number'], 'required'],
// rememberMe must be a boolean value
['name', 'string','length'=>[1,10]],
['number', 'number'],
];
}
public function getSeller()
{
return $this->hasOne(Seller::className(), ['id' => 'seller_id']);
//'id'是表seller里面的,'seller_id'是本表里面的
}
public function attributeLabels() {
parent::attributeLabels();
return [
'name'=>'名称',
'cate'=>'种类',
'number'=>'数量',
'sell_time'=>'登记时间',
];
}
}
和:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Seller extends ActiveRecord
{
public static function getDb()
{
return \Yii::$app->db2;
}
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['name', 'gender','student_number','mobile','if_alipay','if_present','if_big','sell_time'], 'required'],
['name', 'string','length'=>[1,5]],
['student_number', 'number','min'=>0,'max'=>9999999999],
['mobile', 'number','min'=>0,'max'=>99999999999],
];
}
public function attributeLabels() {
parent::attributeLabels();
return
['name'=>'姓名',
'gender'=>'性别',
'qq'=>'qq(选填)',
'wechat'=>"微信(选填)",
'student_number'=>'学生号',
'major'=>'专业(选填)',
'grade'=>'年级(选填)',
'mobile'=>'手机号码',
'if_big'=>'是否有大件商品',
'if_present'=>'6.3号当天是否能亲自到场摆摊',
'if_agent'=>'是否同意将书籍放入书籍专区,由工作人员售出',
'if_together'=>'是否同意与他人合摊',
'if_alipay'=>'是否同意用支付宝付款',
'if_donate'=>'是否同意将未售出物品捐赠',
'sell_time'=>'摆摊时间',
];
}
public function getGoods()
{
//建立一对多关系
return $this->hasMany(Goods::className(), ['seller_id' => 'id']);
}
}
官方文档我在看,这部分在开发中。求大牛解,我们比比速度。
改
这里有个Yii1的教程,你先参考一下:
http://www.yiichina.com/tutorial/9
视图:
感谢分享代码,在你的代码的基础上,我可以实现新增的时候一次插入多条数据。在网上找了js代码实现了点击‘新增一行’和‘删除’一行的功能。但是在更新数据的时候遇到了麻烦,如何在更新的时候,对新增加的行数据进行保存,而对删除了的行数据进行删除呢?
不知道你有没有已经解决了我遇到的问题?
但是rule验证是个问题,比如动态新增的文本框的值,如果为空值时,在多模型下validateMultiple()会返回全部错误,不知道题主怎么解的,目前研究出来的也只是通过开启表单ajax验证来解决这个rule的问题。
参考:
https://github.com/yiisoft/yii2/issues/9811
https://github.com/yiisoft/yii2/issues/1399
不错,学习了
field($v, “[{$index}]name”)
和
field($v, “{$index}name”),请问这两种写法谁是正确的?新手表示看不懂,这里的{}、[]应该怎么理解?
用来标识下表的,用field($v, ‘[‘.$index.’]name’)才可以。
学到模块这,按照文档上的,在模块init()方法中添加如下代码:
public function init()
{
parent::init();
//加载配置文件
Yii::configure($this,__DIR__.'/config.php');
}
然后在当前目录下创建一个config.php文件:
return [
//配置模块默认路由
'defaultRoute'=>'default'
];
然后通过路由访问模块的时候,报错:
PHP Warning – yii\base\ErrorException
Invalid argument supplied for foreach()
/**
* Configures an object with the initial property values.
* @param object $object the object to be configured
* @param array $properties the property initial values given in terms of name-value pairs.
* @return object the object itself
*/
public static function configure($object, $properties)
{
foreach ($properties as $name => $value) {
$object->$name = $value;
}
return $object;
}
是说在configure方法中的,我就是按照文档上的写的,这样怎么修改呢?
虽然php是弱类型语言,但是也要注意形参和实参数据格式的一致性。你调用configure时第二个参数是个文件路径,而人家需要你提供数组。教科书上的例子也写的很清楚了:
问题这样的
created_at 创建时间
updated_at 更新时间
动作:
1、新增 created_at = updated_at = time()
2、更新 created_at 不变 updated_at = time()
在models里创建时间和更新时间都可以指定默认值为time()
为题来了,更新的时候创建时间也跟着变了,怎么办?
如果分不够群里CALL我哈
最终解决代码:
use yii\behaviors\TimestampBehavior;
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'created_at',
'updatedAtAttribute' => 'update_at',
//'value' => new Expression('NOW()'),
//'value'=>$this->timeTemp(),
],
];
}
使用它TimestampBehavior
能帮助到你
创建时间为什么要变?
默认就是created_at和updated_at
我要分
使用 TimestampBehavior 准确无疑, yii 的创建用户就是这么玩的
我创建的时候 这两个时间一起插入数据库没有问题 但是当我修改的时候 两个时间没有变化
如果我同时给这两个时间加上值 update_at=time()和created_at=time() 数据库同时两个时间都更新了 我只想让update_at一个时间更新 怎么做
model
controller
想法如下:
有时候我觉得用views中的参数来决定用哪个layout
这样子该怎么做呢?
frontend/views/page/default.php$this->layout='main';
报错
<?php
报错
//include("../layouts/main.php");
?>
该怎么做呢?
原则上,视图应该是先渲染的,所以理论上可以做到在视图中再决定使用什么母版,我想你应该在视图中这样做:
因为在视图里,$this是指视图对象,而非控制器对象,这个是YII2.0的变化之一。layout
是要在controller
里面设置的一个变量!
这样可以实现吗?
请问各位大大,我打验证码时,ajax验证可以通过,提交后却终是出现error信息,验证码错误,我查看session的素有内容,发现正确的验证码就始终不变的,难怪总是错,请问这个怎么解决呢?跪求真理
session内容如下
array(6) { ["__flash"]=> array(0) { } ["__captcha/site/captcha"]=> string(7) "bqcggov" ["__captcha/site/captchacount"]=> int(1) ["__returnUrl"]=> string(19) "/nova/user/register" ["__captcha/user/captcha"]=> string(6) "kappfi" ["__captcha/user/captchacount"]=> int(2) }
每次刷新["__flash"]
是变化的,["__returnUrl"]
始终不变
验证码不变需要改框架源码 vender\yiisoft\yii2\captcha\CaptchaAction.php getVerifyCode($regenerate = true)
验证码总是错误 应该是你的 $captchaAction 属性没有设置正确。
model 的rules方法
[‘captcha’, ‘captcha’, ‘message’=>’验证码错误’, ‘captchaAction’=>’user/captcha’],
模板的地方也有个 captchaAction 选项。
<?php echo Captcha::widget([‘name’=>’captchaimg’,’captchaAction’=>’login/captcha’,’imageOptions’=>[‘id’=>’captchaimg’, ‘title’=>’换一个’, ‘alt’=>’换一个’, ‘style’=>’cursor:pointer;’],’template’=>'{image}’]); ?>
我验证码没用model,直接在控制器里用$caprcha->validate($data[‘captcha’]);怎么验证呢
我验证码没有用model,直接自定义的登录页面就是想用yii2框架里面的验证码功能
我直接在页面里面用 <?php echo Captcha::widget([‘name’=>’captchaimg’,’captchaAction’=>’login/captcha’,’imageOptions’=>[‘id’=>’captchaimg’, ‘title’=>’换一个’, ‘alt’=>’换一个’, ‘style’=>’cursor:pointer;’],’template’=>'{image}’]); ?>
然后在页面里面怎么去把接收到的验证码比对验证呢?
找了一些资料
咋……………………安装啊 求指教……。。菜鸟……
答案在这里。。。。有点无语……
http://www.yiifans.com/forum.php?mod=viewthread&tid=11503&fromuid=2呵呵呵。。。很不错。菜鸟必经之路
Composer中文网
好好的认真使用过一次就知道这东西的实在。
有条件的话 还是建议使用composer 这货以后是个趋势
已經安裝好srbac。現時有一個問題是:如果有一筆記錄是user001建立,那麼我想只能user001才可以更新或者刪除這一筆記錄,請問這個要如何實現,是不是要用bizrule,我試過在bizrule輸入 “return Yii::app()->user->id==$params["record"]->username;
” 就顯示 Error:403 ‘你無權運行’。網上查的很久,可是好像很少人有詳細的解答。如果不用bizrule,還有甚麼辦法嗎? 謝謝
其中’t_’代表task,’o_’代表operation。
mac 升级10.10 自带5.5的php 验证码不显示
是因为osx 10.10自带的php5.5的gd扩展不支持png,验证码是png图片,所有就不支持了。
解决方案:可通过brew安装php5.5即可
以下是复制过来的,你也可以自己google