谁一开始就是大神?

PHP 第61页

PHP

一个修改密码的功能,收集表单后load方法返回false,大神帮忙查看是什么原因[2.0]

Neocrab阅读(82)

控制器

public function actionPassword()
    {
        $model = new PasswordForm;
        $request = Yii::$app->request;
        $res=$model->load(Yii::$app->request->post());

        var_dump($res);
        if($request->isPost && $model->load(Yii::$app->request->post()) && $model->changePassword())
        {
            //echo "123";
            Yii::$app->user->logout();
            return $this->goHome();
        }else{
            return $this->render('modify-password',['model'=>$model]);
        }
    }

model

<?php
namespace frontend\models;

use Yii;
use yii\base\model;
use common\models\User;

class PasswordForm extends model
{
	public $password;
	public $pass1;
	public $pass2;

	public static function tableName()
    {
        return 'user';
    }
	
	public function changePassword()
	{

		$id = Yii::$app->user->id;
		$admin=  User::findIdentity($id);
		$password = $admin->password_hash;
		if(Yii::$app->getSecurity()->validatePassword($this->password, $password)){
			if($this->pass1 == $this->pass2){
				$newPass = Yii::$app->getSecurity()->generatePasswordHash($this->pass1);
				$admin->password_hash = $newPass;
				if($admin->save()){
					return true;
				}else{
					return false;
				}
			}else{
				Yii::$app->session->setFlash('contact','两次新密码不相等');
				return false;
			}
		}else{
			Yii::$app->session->setFlash('contact','旧密码错误');
			return false;
		}

	}
	
}

视图

<?= Html::beginForm(['password'], 'post', ['enctype' => 'multipart/form-data']) ?>
									<div class="pass">
										<p class="pass-box">
											<img src="<?=$baseUrl?>images/srmm.png"  />
											<!--<input type="password" name="old" placeholder="输入旧密码…" />-->
											<?=Html::input('password','model[password]','',['placeholder'=>'输入旧密码…']) ?>	
										</p>
										<!--<span>旧密码错误</span>-->
									</div>
									<div class="pass">
										<p class="pass-box">
											<img src="<?=$baseUrl?>images/srmm.png"  />
											<!--<input type="password" name="new" placeholder="输入新密码…" />-->
											<?=Html::input('password','model[pass1]','',['placeholder'=>'输入新密码…']) ?>	
										</p>
										<!--<span>新密码不符合</span>-->
									</div>
									<div class="pass">
										<p class="pass-box">
											<img src="<?=$baseUrl?>images/srmm.png"  />
											<!--<input type="password" name="old" placeholder="再次输入新密码…" />-->
											<?=Html::input('password','model[pass2]','',['placeholder'=>'输入新密码…']) ?>	
										</p>
										<!--<span>2次密码输入不一致</span>-->
									</div>	
							</div>
							<p class="btn">
								<!--<button>保 存</button>-->
								<?=Html::submitButton('保 存')?>
							</p>
						</div>
						<?= Html::endForm() ?>

PasswordForm 中增加下面规则:

如果用了load, 建议在Form中使用 Html::activeTextInput 之类的方法

Yii2modelrules里面自义规则无效,怎么解决??[2.0]

Lvydolphin阅读(84)

在rules里面自定义规则,代码如下:

public function rules()
    {
        return [
            ['username','required','message'=>'请输入用户名'],
            ['username' , 'checkname' , 'skipOnEmpty' => false],
       ];
}

public function checkname($attribute , $params)
    {
        if(!preg_match("/^[\w]{6,20}$/" , $this->$attribute)){
            $this->addError($attribute , '用户名必须为6~20的数字或字母');
        }
    }

第一个是有效的(’请输入用户名),但是第二个就没效果了,不验证了,不知道是什么情况,有知道的吗

你这样仅支持提交后验证,要在填写时验证,再去前台写一个验证js才能实现.
Core validator 如 required 同时支持客户端验证和服务端验证;Inline validator 如 validname 不支持客户端验证,仅支持服务端验证。换句话说,validname validator 必须提交表单后才能触发验证。
rules 相关验证可以多试试

jui怎么使用?[2.0]

LvyStone阅读(78)

插件已经下载好, 求使用jui的例子

<?php
use yii\jui\DatePicker;
?>

可以用attributeLabels()来对应字段的中文,有没类似的方法可以value的?[2.0]

Lihope阅读(85)

在GridView::widget里,可以用attributeLabels()来指定对应字段的中文,有没类似的方法可以指定value的?

 public function attributeLabels()
    {
        return [
            'log_id' => '日志ID',
            'company' => '来源公司ID',
            'user_id' => '用户ID',
            'modules' => '模块来源',
            'create_time' => '发生时间',
        ];
    }

················
经过一番努力终于早到了解决办法,既然自己回答不了我就在这里分享一下吧
以modules字段为例,他的值有’module_1′,’module_2′,’module_3’……
这时我们可以在对应的Model文件中添加以下代码:

    const MODULE_1 = 'module_1'; 
    const MODULE_2 = 'module_2'; 
    const MODULE_3 = 'module_3'; 

    public static $moduleList=[
        self::MODULE_1=>"模块一",
        self::MODULE_1=>"模块二",
        self::MODULE_1=>"模块三"
    ];

    public function getModule(){
        $modules = self::$moduleList[$this->modules];
        return isset($modules) ? $modules : null;
    }

最后修改对应的视图文件,调用getModule方法

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            [
                'class' => 'yii\grid\SerialColumn',
                'headerOptions' => ['class' => '']
            ],
            'order_id',
            [
                'attribute' => 'modules',
                'headerOptions' => ['class' => 'col-md-1'],
                'value'=>
                    function($model){
                        return $model->Module;
                    },
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

最后显示的效果是,当数据库存放的值是’module_1′,’module_2′,’module_3’……那么前端显示的将是对应的中文’模块一’,’模块二’,’模块三’······

设置字段默认值?
你确定你不是在开玩笑?

YII2控制器,action路由大小写问题[2.0]

kenslim阅读(75)

使用驼峰命名控制器和方法,如何在url使用
控制器名字ConNameController.php

public function actionActionName() {
    echo 'hello world';
}

怎么设置才能是路由是 /conname/actionname

这个事情很难做,你可以查看源码Module.php 560行,其内容如下:
可以看到’-‘是直接写在里面的,除非你要修改源码,或者将相关的内容都覆盖掉(如继承Application,重写相应的方法,但不排除会造成其他bug)
注:这里只列出了controller名字解析的地方
https://github.com/yiisoft/yii2/blob/master/framework/base/Module.php#L560
。。。你这个问题问的太不详细了
控制器名字ConnameController.php,action名actionActionname
con-name ?
醉了醉了醉了…
actionActionname ?

@property这样的注释格式,有什么作用,可以一键注释成这种格式吗?[2.0]

littleCherry阅读(76)

/**
 * This is the model class for table "user".
 *
 * @property integer $id
 * @property string $username
 * @property string $mobile
 * @property string $auth_key
 * @property string $password_hash
 * @property string $password_reset_token
 * @property string $email
 * @property integer $status
 * @property integer $role
 * @property string $created_at
 * @property string $updated_at
 * @property string $sex
 */
class User extends \yii\db\ActiveRecord implements IdentityInterface
{

这是符合phpdoc的注释格式,有很多工具可以解析这类注释并且直接生成文档,例如phpDocumentor, doxygen等等。IDE例如eclipse的PDT,InteliJ的IDEA和PHPStorm也能解析这种注释格式,并且根据注释来辅助生成代码提示
如果你使用gii生成代码,比如你用gii生成model,它默认就有这个注释

yii2第三方登录遇到的问题[2.0]

lionJames阅读(75)

发个问题真蛋疼,关闭了又不能删除,写了整整一篇忘记点发布就关了,又得重新写。事情是这样的:我的老大叫我在网站里实现qq第三方登录的功能,用腾讯官方给的SDK,很容易就实现了(这也证明我的流程是没有错的),但是因为项目框架的用yii2,所以,没办法,就上网找咯,Github上官方写的第三方登录扩展是针对facebook、github等外国平台的,在天朝也是没什么luan用的,所以就继续找。

找到两位仁兄写的东西,Yii2中的OAuth扩展及QQ互联登录QQ等第三方登录,后者其实就是模仿前者写的,他自己也作了说明,只是他把QqOAuth这个类放在了不同的地方引用而已,然而并没有什么luan用,因为原作者写的东西本来就有错,连他自己网站的QQ登录也出现那个回调地址有问题的问题,他的QQ登录,发这篇东西原因,是不想你们走我的老路,恳请大神们帮我下,用他们两人写的教程为啥出错?还有我看到本站其实有Qq登录的功能,我想问站长巡洋艦大哥,使用官方SDk,还是自己写好的yii版本呢?能不能分享下怎么实现那个功能?QQ截图20160518104056.png

这里是我的QQ登录的实现 https://github.com/yiichina/yiicms/blob/master/frontend/widgets/QQClient.php
mark,需要时再研究
Mark一下,肯定会要用到的。。
Mark一下,肯定会要用到的
你的问题解决了吗?QQ提示100010,回调错误。我也遇到了这个问题
我现在就纠结这个问题,qq互联回调不让写问号,这b框架自己非要有。网上查很多,但是全 拷贝粘贴的。一个符号不带差的。楼主解决了分享下啊
已集成 第三方登录

yii2实现第三方登录[2.0]

Bravefrog阅读(67)

yii2作为后台如何通过接口写移动端的第三方登录,如qq,微信,求指点

跟纯PHp写思路应该一样吧

控制器问题[2.0]

Newseagull阅读(86)

class HomePageController extends Controller{
	public function actionIndex(){
		return $this->render('index'); 
	}
}

这样访问:
http://127.0.0.1/yii/b/web/index.php?r=home-page
提示:

Not Found (#404)
Page not found.

哪里有错呢?

看下base\controller
url :
http://127.0.0.1/yii/b/web/index.php?r=home-page/index
or
学习了,Camel case controller name not well supported #493,view文件夹也需要是’home-page’。

登录

找回密码

注册