谁一开始就是大神?

PHP 第88页

PHP

更新yii2,不成功[2.0]

Swiftlovely阅读(32)

我是通过 composer 更新的,但是总是报错,一直更新失败,具体原因我也不清楚,我截了图,请大家帮我看看,谢谢!
屏幕快照 2015-07-19 下午3.28.17.png

屏幕快照 2015-07-19 下午3.28.30.png

好像是漏装了fxp/composer-asset-plugin
运行 composer global require "fxp/composer-asset-plugin:~1.0.0",再试一下

unique验证器[2.0]

Noblefans阅读(31)

使用unique验证器的时候,前端是不会ajax验证的,怎么让前端ajax自动的验证?yii有能自动实现这一点吗?

在教程中有呀,用户注册Ajax验证,用于验证用户名唯一性,邮箱唯一性
在ActiveForm中配置'enableAjaxValidation'=>true,默认是false
我昨日 用 rules ‘unique’ 成功 ajax 使用
是參考官方網站
http://www.yiiframework.com/doc-2.0/guide-input-validation.html#ajax-validation
花點時間看 有用的(雖然已經回復過 但英文版的更詳細)

请问有没有办法,让gii生成的model的属性,与数据库中的字段名称不一样?[2.0]

Fionafans阅读(28)

大家好,有表user,字段:name。
直接使用gii生成model,user->name.可以进行设置,然后user->save();等等。
请问如果这个时候修改了数据库的字段名称,是否可以 不改变属性名name的情况下,还能继续使用这个model的AR操作呢?
我尝试了。

public function attributes()
{
    return [
        'cn_name'=>'name'
    ]
}

设置后,程序是没有错的,但是当然save的操作时,就会提示表user中不包含name的列(确实不存在,因为已经修改为cn_name了)。
不知道有什么办法可以解决?

实在不想整个项目全部去修改namne 为 新的 cn_name?

你上面的修改不是对字段映射的修改,而且修改的字段的标签,这个标签一般用在表单中。
可以这样试一下:
在model中增加成员变量,public $cn_name;
在beforeSave时,传递成员变量的值 $this->name = $this->cn_name;
记得$name用private

DetailView中如何给图片带上tooltip[2.0]

CGdear阅读(28)

视图代码:

<?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'id',
            [
               'attribute'=>'img',
               'img:image',
               'format' => ['image',['width'=>'166','height'=>'166']],
            ],
        ], 
    ]) ?>

img 已显示出图片,先需要当鼠标停在图片上显示图片的url。请各位大神赐教,谢谢。

这样?
你确定不报错
值是 0 ,1,2,4 这个我要显示中文怎么做呢

YII2发送邮件,报服务器内部错误[2.0]

littleLion阅读(32)

今天有个需求需要发送邮件使用了下YII2的发送邮件。配置好之后,测试代码运行报服务器内部错误。
配置文件:

'mailer' => [
    'class' => 'yii\swiftmailer\Mailer',
    // send all mails to a file by default. You have to set
    // 'useFileTransport' to false and configure a transport
    // for the mailer to send real emails.
    'useFileTransport' => false,
    'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'smtp.qq.com',
        'username' => '***',
        'password' => '**',
        'port' => '25',
        'encryption' => 'tls',

    ],
    'messageConfig'=>[
        'charset'=>'UTF-8',
        'from'=>['***'=>'admin']
    ],
]

使用qq发送。。
控制器代码:

$mail = Yii::$app->mailer->compose();
$mail->setTo('****@qq.com');
$mail->setSubject("test");
$mail->setHtmlBody("测试测试");
if ($mail->send())
    echo "成功";
else
    echo "失败";
die();

运行报错,send()方法不能正确执行,这是什么原因。

我使用正常,骚年你的配置也是OK的,你确定你QQ邮箱smtp打开了??还有要注意你的端口啊。
ActionMailer啊,可参考 http://guides.rubyonrails.org/action_mailer_basics.html 这里。
我也是用的163发的,之前是可以,到后来不知道为什么,报了服务器内部错误,纠结了好半天,后来改用了系统内置的sendmail发送了
根据这篇东西,我试着简化了一下,是可以的。
为什么我的怎么也不行啊要不就是内部错误要不就是超时
感觉你的SMTP不对;
我之前用163,qq,sohu,都在报错,后来索性用live,前面的问题好多都没了,就是挺慢的,有时候注册了过个十几分钟才收的到验证邮箱

使用Yii::$app->user核心组件时,为什么需要数据库中的用户表名也是user[2.0]

TinaLion阅读(30)

我找了找 yii/web/user中的源码,未发现有显式声明 $class = $this->identityClass; 的地方呀。
我的users表同样实现了Identity..的接口。
但是登录时,他会去从user表中查找数据。
以下是我思考步骤:
Yii::$app->user->indentity->username 先去application中找user组件
找到后跳到yii/web/user中执行getIdentity()函数
然后再跳到renew AuthStatus()函数中。然后在这里的时候,他就去找user了。报错报的是user模型不存在。
我想知道的在哪里声明默认的 $class = $this->identityClass 。它是一个属性,它在哪里被设定的呢?

config > components :
需要有个表实现身份认证接口:implements IdentityInterface
然后这个模型对应什么表就是你自个定的了
identity不是indentity

布局拉取数据怎么弄[2.0]

Tinadear阅读(31)

view使用布局后在布局文件里拉取数据应该怎么写啊,我要在布局文件main.php中取得controllers中maincontroller.php的变量mphone的值。我写的Yii::$app->controller->mphone报错

$this->params[]
比如,在 view 视图里,(注意:不是控制器,意味着你要先把变量传到视图里)定义
$this->params['mphone'] = 'iphone';
在 layout 布局里,就可以通过 $this->params['mphone'] 来获得 iphone

通过cookies判断控制器权限没有cookies跳转到登录页面或者给个提示信息[2.0]

Cindytom阅读(30)

yii2 里控制器里通过接口登录, 跳转到用户中心页面,数据库都不在本地都是访问的接口, 用户名保存到cookies中, 我想让他访问别的控制器中, 判断cookies用户名是否为空,为空就跳转到登录页面, 有办法每个控制器运行的时候都做下判断 cookies的用户吗?

报错原因,应该是 /user/login 方法所在的Controller也继承了BaseController!导致死循环了
如果你的cookie是Yii生成的,那么使用AccessController来控制。
否则,重写User。
yii不是自带了那个用户判断吗

yii登录之后,显示空白页

Ellielovely阅读(29)

views 里面代码

<!DOCTYPE html>
<html>
    <head>
	<title>前台登录</title>
	<link href="<?php echo (Yii::app()->request->baseUrl);?>/assets/index/css/jquery.mobile-1.4.5.min.css" type="text/css" rel="stylesheet">
         <script src="<?php echo Yii::app()->request->baseUrl;?>/assets/index/js/jquery-2.1.4.min.js"></script>
         <script src="<?php echo Yii::app()->request->baseUrl;?>/assets/index/js/jquery.mobile-1.4.5.min.js"></script>
		 <script src="<?php echo Yii::app()->request->baseUrl;?>/assets/index/js/main.js"></script>
	<style>
		.image{
			width:60px;
			height:60px;
		}
		#header{
		}
		.errorMessage {
			color: red;
		}
	</style>
    </head>
    <body>

	<div data-role="page">
	    <div data-role="content">
		<h1>前台登录APP</h1>
		<br><br><br>
		    <?php  $form = $this->beginWidget('CActiveForm'); ?>
		    <?php echo $form->textField($loginForm,'nickname',array('id' =>'user','placeholder'=>'用户名/邮箱')); ?>
		    <?php echo $form->error($loginForm,'nickname');?>

		    <?php echo $form->passwordField($loginForm,'password',array('id' =>'pwd','placeholder'=>'请输入密码'));  ?> 
		    <?php echo $form->error($loginForm,'password');?>

		    <?php echo $form->textField($loginForm,'captcha',array('id' =>'verify','placeholder'=>'请输入验证码'));?>
		    <?php echo $form->error($loginForm,'captcha');?>

		    <?php $this->widget('CCaptcha',array(
    				'showRefreshButton'=>false,
    				'clickableImage' => true,
    				'imageOptions' => array('alt'=>'点击换图',
    			        'title' => '点击换图',
    			        'style' => 'cursor:pointer')
    				     ));?>
    				<br/>
		    <input type="submit" value="登录"> 
		    <?php $this->endWidget(); ?>  
	    </div>
	</div>
	<script>
		
	</script>
    </body>

models里面LoginForm.php文件代码

<?php

/**
 * LoginForm class.
 * LoginForm is the data structure for keeping
 * user login form data. It is used by the 'login' action of 'SiteController'.
 */

class LoginForm extends CFormModel
{
	public $nickname;
	public $password;
	public $rememberMe;
	public $captcha;
	private $_identity;
	
	/**
	 * 声明验证规则。  
	 * 规则,需要用户名和密码,
	 * 和密码需要身份验证。
	 */
	public function rules()
	{
		return array(
			// nickname and password are required
			array('nickname', 'required','message'=>'用户名不能为空'),
			array('password', 'required','message' => '密码不能为空'),
			// rememberMe needs to be a boolean
			array('rememberMe', 'boolean'),
			// password needs to be authenticated
			array('password', 'authenticate'),
			array('captcha','captcha','message'=>'验证码错误'),
		);
	}

	/**
	 * 记住我
	 */
	public function attributeLabels()
	{
		return array(
			'rememberMe'=>'Remember me next time', 
		);
	}

	/**
	 * 判断用户名密码
	 */
	public function authenticate($attribute,$params)
	{
		if(!$this->hasErrors())
		{
			$this->_identity=new UserIdentity($this->nickname,$this->password);
			if(!$this->_identity->authenticate())
				$this->addError('password','用户名或密码错误');
		}
	}

	/**
	*记住登录
	*/
	public function login()
	{
		if($this->_identity===null)
		{
			$this->_identity=new UserIdentity($this->nickname,$this->password);
			$this->_identity->authenticate();
		}
		if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
		{
			$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
			Yii::app()->user->login($this->_identity,$duration);
			return true;
		}
		else
			return false;
	}
}

controllers文件里面 LoginController.php 代码

<?php
class LoginController extends Controller
{
	public function actionIndex()
	{
		$loginForm = new LoginForm();
		if(isset($_POST['LoginForm'])){
			$loginForm->attributes=$_POST['LoginForm'];
			if($loginForm->validate()&&$loginForm->login()){
				$this->redirect(array('main/main'));
			}
		}
		$this->render('index',array('loginForm' =>$loginForm));
	}
	public function actions(){
	    return array(
	    	'captcha' => array(
	    		'class' => 'system.web.widgets.captcha.CCaptchaAction',
	    		'height' => 40,
	    		'width' => 80,
	    		'minLength' => 4,
	    		'maxLength' => 4,
	    		//'testLimit' => 999,
	    		),
	    	);
	}
	public function actionOut(){
		Yii::app()->user->logout();
		$this->redirect(array('login/index'));
	}


	public function actionRegister(){
	$registerModel = new Register();
	if(isset($_POST['Register'])){
		//收集信息,保存信息,页面重定向
			$registerModel->attributes=$_POST['Register'];
			if($registerModel->validate()){
				$registerModel->Password=md5($registerModel->Password);
			    if($registerModel->save()){
			    	$this->redirect(array('Check'));
			    }
			}
		}
		//调用添加的视图 
		$this->render('register',array('registerModel' => $registerModel));
	}

}

用户验证的逻辑在protected\components\UserIdentity.php的authenticate()方法下,我估计是你这个方法没改或者写错了。你去检查一下。
你好歹return一下呀。。
贴出maincontroller看看

登录

找回密码

注册