谁一开始就是大神?

PHP 第7页

PHP

yii2框架登录后,没有勾选RememberMe,但每次都是自动登录;求助?[2.0]

MarkLion阅读(45)

yii2框架用的是basic基本版!

问题
用户登录问题
配置文件

'user' => [
    'identityClass' => 'app\models\User',
    'loginUrl'      => ['admin/index/login'],
    'enableAutoLogin' => true,//这里不管是设置为true还是false,每次都自动登录
    'idParam' => '__user'
],

原来的代码

return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);

修改后的代码 保存时间为0 ,但是还是每次都自动登录了

return Yii::$app->user->login($this->getUser(), 0);

登录代码用的原生的登录

if ($model->load(Yii::$app->request->post()) && $model->login()){
    return $this->redirect(["member/order"]);
}

打印了 $this->rememberMe 的值,勾选和不勾选的时候是正确的,都能正常获取!

现在问题是,每次不管是否勾选 rememberMe 还是把 enableAutoLogin 设置成 false;还是直接把 return Yii::$app->user->login($this->getUser(), 0); 注册的保存时间设置为零,在不退出和清楚cookie的情况下,关闭浏览器,甚至关闭电脑,当下次打开浏览器始终都是自动登录状态?请问高手们这个是什么问题啊,我用原生框架测试还是又这个问题?

我现在想实现的就是,在没有勾选的情况下 当关闭浏览器,或者关闭电脑后,下次打开的时候就需要重新登录,而不是自动登录,如果勾选了,可以按照登录注册的给与时间比如我给与 3600*24*2,就是两天自动登录,超过给定的时间就必须冲洗输入密码登录

分不多了,请高手们给我解答一下,谢谢你们!

你用的是框架带的loginForm吗 如果是 里面有public $rememberMe = true; 改成false;就可以了
还有就是你在接收数据验证的时候打印一遍从前台传递过来rememberMe看看是什么,如果不管你点不点都是true那你就可以找到你new 的模型去里面查看。
说白了就是打印数据查看从哪得到的true,进行逆推
下载了 basic 版本使用了一下,不点击 remember me 则关闭浏览器之后没能保持登录状态,没能重现你说的问题。
先把浏览器的cookie清一下试试

php7.2无法运行yii问题[2.0]

lovelylove阅读(48)

新版因为object类名不让用了.好像设计框架的基础object 类 !这个类名官方有准备改吗!自己改完了 composer 升级一下不是又挂了吗

Yii 2.0.13 已经修复此问题了,原先继承 yii\base\Object 的话,现在改成继承 yii\base\BaseObject
更新日志链接:http://www.yiiframework.com/news/149/yii-2-0-13-is-released/ 中的 PHP 7.2 compatibility
只是不建议使用,没有完全禁用吧,yii\base\Object,旧的可以慢慢改为继承 yii\base\BaseObject,新的也写成继承yii\base\BaseObject

事务中的rollback方法可以省略吗[2.0]

ACGsuper阅读(47)

$transaction = Customer::getDb()->beginTransaction();
try {
    $customer = new Customer();
    $customer->id = 1;
    $customer->save();
    
    $customer = new Customer();
    $customer->id = 2;
    $customer->save();
    
    $customer = new Customer();
    $customer->id = 3;
    $customer->save();
    
    $transaction->commit();
} catch(\Exception $e) {
    $transaction->rollBack();
    throw $e;
}

如上代码,$transaction->rollBack(); 这行代码感觉可有可无,去掉之后,如果数据库执行异常了,所有try里面的数据库操作都不会被执行

请求中不提交的话,下次 事务提交会把这次的sql提交掉的,具体的细节你可以搜一下。
三条数据,其中一条发生错误,ROLLBACK的话,其余两条数据也会被回滚,我是这么理解的
应该不可以的
不可以的,否则没办法

controllers调用models报错[2.0]

Kindqueen阅读(44)

Test.php

<?
namespace app\models;

use yii\db\ActiveRecord;

class Test extends ActiveRecord
{
	public static function tableName(){
		return "test";
	}
}

IndexController.php

<?php
namespace app\controllers;

use yii\web\Controller;
use app\models\Test;

class IndexController extends Controller
{
	public function actionIndex()
	{
		$model = new Test();
		$data = $model->find()->one();
		return $this->render("index",array("row"=>$data));
	}
}

为什么$model = new Test();报错

Unknown Class – yii\base\UnknownClassException
Unable to find 'app\models\Test' in file: D:\phpStudy\PHPTutorial\WWW\bs/models/Test.php. Namespace missing?

Test.php文件的开始应该是
<?php
namespace app\models;
….
你少写了php吧,短标记已经不适用,在apache默认不启用,除非你自己将它开启。
PHP标记
找不到类啊,看看命名空间
在你的IndexController控制上写
namesapce app\controllers;

use app\controllers\Test;
试试
不需要new
这么写就可以

一个关于二维数组的逻辑问题

Bobelephant阅读(42)

比如[[1,2,3],[4,5],[7,8,9]]该怎样生成下面这样的组合
147
157
148
158
149
159
247
257
248
258
249
259
347
357
348
358
349
359

<?php
三个for循环

魏曦Yii2.0视频教程中GridView的column中value的取值问题[2.0]

Harryyak阅读(42)

比如:backend/view/post/index.php代码:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
       // ['class' => 'yii\grid\SerialColumn'],

        //'id',
        ['attribute'=>'id',
        'contentOptions'=>['width'=>'30px'],
        ],
        'title',
        //'author_id',
        ['attribute'=>'authorName',
        'label'=>'作者',
        'value'=>'author.nickname',
        ],
       // 'content:ntext',
        'tags:ntext',
        //'status',
        ['attribute'=>'status',
        'value'=>'status0.name',
        'filter'=>Poststatus::find()
                ->select(['name','id'])
                ->orderBy('position')
                ->indexBy('id')
                ->column(),
         ],
        // 'create_time:datetime',
         //'update_time:datetime',
         ['attribute'=>'update_time',
         'format'=>['date','php:Y-m-d H:i:s'],
        ],


        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

其中的status0.name是什么含义?

status0.name 是 post模型关联到state模型里的name字段,你看下post模型里有个方法是不是叫state0()?这个是关联到state模型的数据,而在gridview调用可以用state0.xxx(xxx表示字段)。为什么方法state0()调用name 可以写成 state0.name 你可以参考下源码

【源码分析】Yii2处理处理机制,抽象父类调用自己子类实现?[2.0]

Candyhope阅读(48)

问题:
vendor/yiisoft/yii2/base/ErrorHandler.php 113行 $this->renderException($exception);
调用的是子类实现还是自己的抽象方法。因为在 vendor/yiisoft/yii2/base/ErrorHandler.php这个文件的 279行
定义了 abstract protected function renderException($exception);

而base/ErrorHandler的子类 vendor/yiisoft/yii2/web/ErrorHandler.php 实现了抽象方法 renderException
那么在调用这个子类已经实现的抽象方法,我理解的是在new子类对象时调用,怎么在上面父类里,如上所示描述:
vendor/yiisoft/yii2/base/ErrorHandler.php 113行 $this->renderException($exception);这里怎么调用了,
父类调用了自己的抽象方法的实现???

首先解答一个疑问,不是“父类调用了子类的方法”,而是“子类继承了父类的方法,供这个子类的实例对象调用”。
至于你提到的两种写法,怎么说呢, 原则上讲类的封装就是为了方便复用,所以写法一和写法二,本身都是对的。
只是假如 Parent 类有另外一个子类(SubClass)也需要say方法,且say方法的逻辑流程与你给的流程完全一致时,那SubClass是否也需要实现一次say方法?
通常答案是“no”,say方法从Parent类继承,我们只需要 在SubClass中实现它特定的dosomething 即可与 children 类进行区分。
如果有特定情况,我们也可以在 SubClass 中重写 say 方法,实现其他特殊需求。
额,说的比较模糊。欣赏你观察和思考问题的方式,但至于实际代码怎么写,见仁见智吧
首先对于结果来说,方法1和方法2都是正确的。
但是,我们把一些公用的东西放到父类里面,而不是每个子类都重复来写,这样更符合封装的意义,也更灵活,而方法1正是遵循这样的原则

GridView自义的搜索框怎么DIY设置样式[2.0]

CleverFox阅读(43)

GridView自定义的搜索框怎么DIY设置样式,比如我想把文本框这些东西缩短,请问该怎么设置呢

['attribute' => 'id', 'headerOptions' => ['style' => 'width:60px']],

请教ActiveForm的radioList用法,ActiveForm真心求学。[2.0]

Jasonlemon阅读(46)

<?php $this->beginBody(); ?>
	<blockquote class="layui-elem-quote">
		<p><?php echo Html::encode($this->title); ?></p>
	</blockquote>
	<div class="layui-btn-group">
		<a href="<?php echo yii\helpers\Url::to(['default/adminlist']); ?>" class="layui-btn">返回管理员列表</a>
	</div>
	<?php  $form=ActiveForm::begin([
		'fieldConfig'=>['template'=>'{input}{error}'],
		'options'=>[
		'class'=>'layui-form',
		'id'=>'form_adminadd',
		'style'=>'margin-top:15px;',
		],
		]); ?>	
		<div class="layui-form-item layui-col-md6">
			<label class="layui-form-label">账号名*</label>
			<div class="layui-input-block">
				<?php echo $form->field($model,'adminuser')->textInput([
					"class"=>"layui-input",
					"autocomplete"=>"off",
					"lay-verify"=>"required",
					"placeholder"=>"请输入账号"]) ?>
				</div>
			</div>
			<div class="layui-form-item layui-col-md6">
				<label class="layui-form-label">姓名*</label>
				<div class="layui-input-block">
					<?php echo $form->field($model,'name')->textInput([
						"class"=>"layui-input",
						"autocomplete"=>"off",
						"lay-verify"=>"required",
						"placeholder"=>"请输入姓名"]) ?>
					</div>
				</div>
				<div class="layui-form-item layui-col-md6">
					<label class="layui-form-label">邮箱地址*</label>
					<div class="layui-input-block">
						<?php echo $form->field($model,'email')->textInput([
							"class"=>"layui-input",
							"autocomplete"=>"off",
							"lay-verify"=>"required|email",
							"placeholder"=>"请输入邮箱地址"]) ?>
						</div>
					</div>
					<div class="layui-form-item layui-col-md6">
						<label class="layui-form-label">密码*</label>
						<div class="layui-input-inline">
							<?php echo $form->field($model,'adminpassword')->passWordInput([
								"class"=>"layui-input",
								"autocomplete"=>"off",
								"lay-verify"=>"required",
								"placeholder"=>"请输入密码"]) ?>
							</div>
						</div>
						<div class="layui-form-item layui-col-md6">
							<label class="layui-form-label">确认密码*</label>
							<div class="layui-input-inline">
								<?php echo $form->field($model,'readminpassword')->passWordInput([
									"class"=>"layui-input",
									"autocomplete"=>"off",
									"lay-verify"=>"required",
									"placeholder"=>"请再次输入密码"]) ?>
								</div>
							</div>
							<div class="layui-form-item layui-col-md6">
							<label class="layui-form-label">性别*</label>
							<div>
								<?php echo $form->field($model,'sex')->inline()->label(false)->radioList(['0'=>'保密','1'=>'男','2'=>'女']) ?>
								</div>
							</div>
						<div class="layui-form-item">
							<div class="layui-input-block">
								<a onclick="adminadd();" class="layui-btn"  lay-filter="formDemo">立即提交</a>
								<button type="reset" class="layui-btn layui-btn-primary">重置</button>
							</div>
						</div>
						<?php ActiveForm::end();?>

这个是我ActiveForm的代码,其他的都面前可以没什么问题,就是RadioList那里,的值,让我十分头痛,现在上图:
1.png
上图中,radiolist里面的,,,未命名是什么来的。。~~
现在附上渲染出来的DOM结构图
2.png
~我的疑问有两个,第一是,如何能够将前端板式,最直接的方式应用到Activeform里面?我的运用方式,算是正常的轨道吗?
第二是,如果我的Radio是要取数值,譬如里面有20个值,我怎么能够循环他们出来显示在前端呢?总不能一个一个写吧?
我找了很多的文章,还是没有得到结果,只能在这里向大家求助了,请多多包涵。

第一个问题跳过,针对你的第二个问题,思路是这样子的,假设你有20个值的话,你在model里处理好成数组就行了,radio的格式是数组的形式,类似的还有DropdownList
系统支持自定义样式。不需要的标签,你屏蔽就行了。
具体配置方法,在源码中都有列举。

后台任务的实现[2.0]

Bellapony阅读(46)

项目有需求,需要点击下载文件、或者导出、导入文件的时候,即加入后台任务,在后台那里添加任务运行查询,等查询完数据再提示可以下载,请问应该怎么实现呢,各位大牛

1任务加到数据库,用一个定时脚本去跑,跑完更新状态
2用消息队列去处理
个人想法:
查出数据后,渲染成对应类型的文件,将文件存放的url入表中,可以使用长连接,查看表中是否有它想要数据的url,如果有就提示下载。后台使用rabitMq(消息队列就可以实现异步渲染文件吧)。。。。,前端也可以通过JS点击下载后,隔几秒钟掉一下接口看看需要下载的数据在不在。
建议项目集成workerman或swoole,使用参考文档
我现在有些需求和你差不多,短信,环信,友盟这些都是写入到任务中,发送成功后,同步任务
下载原理也差不多,队列执行下载完后同步下载地址和状态
项目下集成了workerman创建一个守护进程,多个子进程,去执行任务
PC端的socket通信推送消息也支持,
最近也是在做后台管理的时候有个导出 execl 文件,在查看列表页的时候就把当前查看列表的SQL加密作为参数,点击导出就是SQL执行直接导出了。没有什么后台任务进行。如果你的比较繁琐的话,个人建议就是丢到任务中,处理完毕通知用户,至于通知方式可以是 长连接,邮箱,再就是用户刷新或者访问其他站内地址以站内信的方式告知。
我想,在后台队列中生成一个任务,同时生成数据库下载文件,状态为输出处理中,后台队列完毕后,更改状态为可下载
按照你说的需求只能用队列+cron

登录

找回密码

注册