谁一开始就是大神?

PHP 第61页

PHP

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

Neocrab阅读(125)

控制器

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阅读(126)

在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阅读(119)

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

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

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

Lihope阅读(131)

在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’……那么前端显示的将是对应的中文’模块一’,’模块二’,’模块三’······

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

零基础新手请教一些基础问题[2.0]

Wendyqueen阅读(125)

以前用xampp玩过wordpress但是并不懂php只会一些简单的模板和函数,现在知道yii之后突然发现这个才是值得学习的东西。但是感觉用过现成的博客系统之后,遇到yii框架瞬间懵逼了。
主要有两个问题:1、安装调试;2、后面的开发学习思路
第一:
我以前是在本地安装xampp环境运行wordpress的,只需要装好xampp创建数据库然后到网站目录放好wordpress程序,配置一下config.php运行就能装好,并进入后台使用。。
但是yii完全不一样了
首先composer我就不知道是个什么玩意,网上说是依赖。但是我不明白他到底是怎样个依赖,可以说两个php文件之间需要调用另外一个php文件里的某个功能的时候,那这个时候这个依赖关系就是说的连接独立的php吗?
然后就收composer的安装了,自己电脑上直接下载的官网上的安装文件,一直next始终装不上,经常出现连接错误神马的。不过没关系折腾惯了,始终相信奇迹的一直试,最后居然真安装成功了。不明白这个东西到底算不算是yii环境的一部分呢?还有我在安装composer的时候是不是下载了某些东西或者说建立了一个远程连接,远端服务器是不是如果终止这个服务,我这边的这个composer环境就不能用了yii也就不能用了?还是说安装composer必须从远程下载文件才能执行安装,装好它之后就能够配置yii了,就算以后composer下载再难再慢,只要我不更新或删除composer的话,我的yii还是能继续在这个环境运行
最后composer有个什么插件叫composer-asset-plugin,这个我好像并没装成功,但是最后我的yii还是正常访问了。还有个composer.phar又是什么,这个好像也是乱装的。总之乱糟糟的最后勉强配置能访问到yii了
第二个问题:
访问到yii后,根据教程直接到数据库面板新建了个数据库建了个用户的表,然后yii文件夹里面的用户数据也对应改好。能进入yii最原始的后台了,结果发现也只是登录了。然而后台什么东西都没有,并没有。。。装过wordpress的我每次进去都能看到文章啊分类啊,进入yii后台后我懵逼了,这个后台是需要自己从0开始写吗?自己去写面板,建立设置分类的版面,建立写文章的面板和编辑器,还有一些网站页面的固定内容参数配置面板,等等这些东西都是要自己去写的吗?这个后 全不知道有啥,我该怎么学,搜了一下完全没看到后台开发的教程。。
目前就是我用yii的初次感受,希望大家能给我一些建议。不要建议我放弃,虽然没基础,但是我想学,一定要认真学。因为以前玩wordpress感觉白学了。既然接触了php这次我要认真的学一次,哪怕用yii的方式写出一个简单的类似wordpress的后台,我也就满足了。谢谢大家希望大家给出宝贵建议。

composer安装的确是个大问题,我在初次安装Yii2时使用composer从未成功过,几乎放弃,后来在一个朋友的帮助下,终于是把composer安装给整通了,国内composer方式直接安装Yii2最大的一个问题就是强,使用Composer中国全量镜像(http://www.phpcomposer.com/)不用翻.强就可以成功安装Yii2,这是关键,我给楼主说一说这个是怎么做的:
//全局安装composer(windows)
将composer.phar放置到php.exe同一目录下,再编辑一个composer.bat文件,这样就可以直接使用composer安装了,而无需再输入php composer.phar,这样的长格式命令。
注意:应将php.exe的运行目录事先加入到系统的path环境变量当中去!
祝你成功!
建议:你的问题太多,最好一个话题只提一个问题,这样大家知道怎么帮你!
回答下你第二个问题吧,
yii是个框架 wordpress是个cms
框架要重头开发 cms现成的站。。
所以就重头开始写吧!

Yii::info[2.0]

momohope阅读(123)

如果我在main.php的LOG设置中,没有定义h1这个categories,以下语句能不能写入日志文件?
(使用方式:/usr/server/php/bin/php /var/test/yii/yii test/calculate-test >> /root/logs/week.log 2>&1)
Yii::info('hello','h1');

`[
分类可以随便命名的
你把info级别的错误记录日志没。。。

AR::findOne()参数问题[2.0]

BeeLion阅读(114)

$model = WxReply::findOne(['in','id',$ids]);
$model = WxReply::find()->where(['in','id',$ids])->One();

上面的代码查找不到,下面的才行,为什么?

$model = WxReply::findOne(1); findOne是查询1条记录。里面直接写id就可以。
$model = WxReply::findOne(['id'=>$ids]);
这样呢?

modules模块化产生的url有重,如何解决。[2.0]

loveCherry阅读(149)

http://admin.myblog.com/article/article/index 这是我的一个文章列表连接 明显多了一个 article 但是除掉又不行。。报未找到。 解析流程我想是 第一个 article是找到config配置文件 找到了类

article' => ['class' => 'app\modules\article\Module',],  

然后根类找到$controllerNamespace
接下来自然而然的 就找到了 /article/index 这样完成了一个模块访问,
那么问题就来了。url不够简洁。求各位大神解惑。

config文件配置

  'modules' => [
        'article' => ['class' => 'app\modules\article\Module',],
    ],


这是module.php
<?php

namespace app\modules\article;

/**
 * article module definition class
 */
class Module extends \yii\base\Module
{
    /**
     * @inheritdoc
     */
    public $controllerNamespace = 'app\modules\article\controllers';

    /**
     * @inheritdoc
     */
    public function init()
    {
        parent::init();

        // custom initialization code goes here
    }
}

它url出现这个article/article/index,中间这个是控制器名称,你把这个article控制器改成 index 也是个解决办法
这不算是有重,两个article的意义不一样,只是因为你把两个取了一样的名字。
个别路径要调整你可以指定别名,比如用art代替 article/article 。
如果量多,修改路由转发规则
没看太明白,不过我感觉你需要的是/article,url路由要/开头,不然的话是相对路由,如果你当前已经在article模块,就会再出一个article

yii模块怎么载入自义配置啊[2.0]

Gracefans阅读(110)

模块入口

<?php
namespace app\modules\api;

use yii\base\Module;
use yii;

class ApiModule extends Module
{
    public function init()
    {
        parent::init();
        yii::$app->response->format = yii\web\Response::FORMAT_JSON;
        yii::configure($this, require(__DIR__ . '/config/main.php'));
    }
}

模块控制器

<?php

namespace app\modules\api\controllers;

use yii;
use yii\web\Controller;

class IndexController extends Controller
{
    public function actionIndex()
    {
        return (array) yii::$app->params;
    }
}

模块的配置

<?php
return [
    'components' => [

    ],
    'params' => [
        'id' => 5
    ]
];

为什么 yii::configure 没有生效,yii::$app->params打印出来 是父级的值

先获取模块实例再访问模块配置!
模块的配置你用应用实例去获取当然获取不到
同问,我遇到了模块自定义配置不能生效的问题

登录

找回密码

注册