我在模型Cate中声明了一个方法:public function showAll(){ return 'a'; },在控制器CateController中,怎么才能调用???
1、把showAll方法增加static声明,然后可以用Cate::showAll()调用
2、或者,先new,再用,既:
在上面添加use app\models\Cate;
再在控制器的方法里调用Cate::showAll();
我在模型Cate中声明了一个方法:public function showAll(){ return 'a'; },在控制器CateController中,怎么才能调用???
1、把showAll方法增加static声明,然后可以用Cate::showAll()调用
2、或者,先new,再用,既:
在上面添加use app\models\Cate;
再在控制器的方法里调用Cate::showAll();
想做一个人员信息管理系统,头像让他们自己提供,可是一直没有找到yii2相关的摄像头。yii1.1.x的倒有几个。比如yii-jpegcam,比如yiigems的photobooth。哪位有好的建议没?先谢谢啦。
最终选择这个 http://www.yiichina.com/topic/5960
点这里
这好像需要html5,找不到yii1的可以自己写个嘛,做不成扩展,页面引入后直接调用也行啊。
http://www.gbtags.com/gb/share/93.htm
public function actionImport()
{
try {
$columns_keys = [];
$columns = Yii::$app->db->getTableSchema('_crm_product')->columns;
foreach ($columns as $column) {
$columns_keys[$column->comment] = $column->name;
}
unset($columns);
// web 目录下
$pFilename = trim(Yii::$app->request->get('filename'), '/');
// 先用 Reader_Excel2007 读取
$PHPReader = new \PHPExcel_Reader_Excel2007();
// 当前的 Reader_Excel2007 可以阅读该文件吗?
if (! $PHPReader->canRead($pFilename)) {
// 再用 Excel5 读取
$PHPReader = new \PHPExcel_Reader_Excel5();
// 当前的 Reader_Excel5 可以阅读该文件吗?
if (! $PHPReader->canRead($pFilename)) {
return $this->error('无法读取该文件');
}
}
// 载入 xls,xlsx 文件
$PHPExcel = $PHPReader->load($pFilename);
// 获得活动表
$objActiveSheet = $PHPExcel->getActiveSheet();
// 行迭代器
$rows = [];
foreach ($objActiveSheet->getRowIterator() as $row) {
// 单元格迭代器
$cellIterator = $row->getCellIterator();
// 将迭代器设置为只循环存在的单元格, false=不存在
$cellIterator->setIterateOnlyExistingCells(false);
foreach ($cellIterator as $key => $cell) {
if ($row->getRowIndex() == 1) {
$columns[] = $columns_keys[$cell->getValue()];
} else {
$rows[$row->getRowIndex()][] = trim($cell->getValue(), '\' ="/');
}
}
}
} catch (ErrorException $e) {
return $this->error('错误号:' . $e->getCode() . '<br>错误行:' . $e->getLine() . '<br>错误信息:' . $e->getMessage());
}
// 在主服务器连接上开始事务
$db = Yii::$app->db;
$transaction = $db->beginTransaction();
try {
$queryBuilder = $db->queryBuilder;
$chunk_rows = array_chunk($rows, 5000);
$count = 0;
foreach ($chunk_rows as $chunk_row) {
$sql = $queryBuilder->batchInsert('_crm_product', $columns, $chunk_row);
$count += $db->createCommand($sql)->execute();
}
$message = '成功导入 <code>' . $count . '</code> 条记录';
// 提交记录
$transaction->commit();
return $this->ok($message);
} catch (Exception $e) {
// 记录回滚
$transaction->rollBack();
return $this->error('错误号:' . $e->getCode() . '<br>错误信息:' . $e->getMessage());
}
}
检查是否使用了innodb存储引擎
大家好
请问如下的需求应该如何使用AccessControl 实现呢?
controller中有三个方法。
用户有2个
需求:
不知道如何实现呢?
我现在使用
beforeaction 来判断rbac的权限,但是 使用了 beforeaction 之后 我设置的VerbFilter 对 delete方法的post过滤就失效了。 注释beforeaction后 是正常的。
这是我现在的 behaviors配置 但是无法实现 2个已登录用户的 权限区别。
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
'access' => [
'class' => \yii\filters\AccessControl::className(),
//'only' => ['hello',],
'rules' => [
[
'allow' => false,
'roles' => ['?'],
],
],
],
];
}
手册中 AccessControl类 有方法beforeAction 说明是 在所有的过滤之后 在执行之前的最后一个判断的时间了,我感觉比较适合我现在的情况,但是水平太菜,不知道如何去配置AccessControl类的beforeAction 。
请问该如何使用AccessControl 简洁优雅的实现我的需求呢?
使用Yii2自带的用户组件yii/web/User来实现登录,自建的UserModel也继承了IdentityInterface接口,但是在使用Yii::$app->user->login($identity, $duration)登录时,虽然登录成功了,但是$duartion并未起作用,查看生成的cookie始终是24小时后失效,无论怎么调整$duration也不起作用,请问这是什么原因呢?
csdn博客:Yii2 login登陆
可参考这个博客,里面比较详细讲述了yii2 login的问题allowCookie 什么的开了么,具体属性名字忘记了……
enableAutoLogin 是否启用了
這邊是我 models 的 code
namespace app\models;
use Yii;
use app\models\Api;
class Order_api extends Api
{
public $account_id;
public $create_date;
public $auth_code;
public function rules()
{
return [
[['account_id','auth_code'], 'required']
];
}
public function check_params($standard ,$data)
{
return parent::check_params($standard ,$data);
}
}
這邊是 controller 的 code
public function actionTest()
{
$app_order = [
'account_id' => '1',
'create_date' => '2',
'auth_code' => '3'
];
$a = new \app\models\Order_api;
$a->attributes = $app_order; <====== 這邊為什麼我把 models 的 public rules() 整個function 移除
//$a->account_id = '1';
$a->attributes;
var_dump($a); <====== 這邊印出來的卻是 每個成員變數都是 NULL
}
有查看 yii\base\Models attributes() 內部的寫法 他也指示用 ReflectionClass 反映有哪些 public name 而已
想請教 $a->attributes = $app_order; 當我的 models 有 public rules(){ … } 的時候
var_dump($a); 的成員變數是有被賦予值得,但我移除 public rules(){ … }之後成員變數卻都是 NULL
想知道他流程是怎麼跑的為什麼只有 NULL 而沒有值 !!
剛剛沒有看 _set && _get 現在知道怎麼設定了~~~ 希望也可以分享您知道的流程給我參考
$a->attributes = $app_order; 实际调用的是 $a->setAttributes($app_order);
而调用setAttributes方法赋值时, 默认只加载safaAttributes;
所谓的safeAttributes, 指的就是 : 在rules中有声明验证规则的attribute;
这就是rules移掉, 赋值后全是null的原因
所以 : 在rules里面把需要的属性都声明到, 即便是safe也可以.
请问我用了rbac还需要在控制器里面使用behaviors方法吗,新手求教?
视具体情况而定,如检测是否登录了用AccessControl,里面也可以写RBAC中的role
现在我有一个搜索表单,其中有两个属性分别为attr1和attr2,只有当这两个属性的一个属性存在或者都存在的情况下才能执行搜索功能,请问各位大虾这个规则在model中的rules中如何写呢?
我是这样实现的,感觉有些繁琐,同求简洁的解决方案
你可以看下yii2.0的验证规则啊
两个已经关联的表
表1是hasMany,表2是hasOne,并分别由字段id 与 model_id 相关联
表2内的其中5条记录的字段model_id相同,并与表1内字段id的值相同
在表2的controller条件查询应该怎么写?我想在表2的index下显示出表2内model_id值相同的记录
这个yii也有关联的事例 http://www.yiichina.com/tutorial/96
如果是用ActiveRecord手册有说
如果你要一条sql来查就用
用这个类\yii\db\Query() 手册(类手册)有说
或者写原生sql
\yii::$app->db->createCommand($sql)->queryAll();
这问题有点莫名其妙的。
要查询表2的数据你直接查就好了。。要model_id一样 你条件直接model_id=多少,你传进去就好了。。。
要所有根据表1的id分组,你直接查表1,然后用你的hasMany就好了。每个hasMany查出来的就是model_id相同的一类了。
没看明白想说啥!
在登录的时候,使用这个静态方法,但是提示未定义
Yii::$app->user->login(static::findByUsername($this->username))
请问是因为我继承的不对吗?还是什么问题
这个方法是要自己写的~
下面是模版中的方法:
如果你使用数据库,可以用User::findOne(['username'=>$username])