我是通过 composer
更新的,但是总是报错,一直更新失败,具体原因我也不清楚,我截了图,请大家帮我看看,谢谢!
好像是漏装了fxp/composer-asset-plugin
运行 composer global require "fxp/composer-asset-plugin:~1.0.0"
,再试一下
我是通过 composer
更新的,但是总是报错,一直更新失败,具体原因我也不清楚,我截了图,请大家帮我看看,谢谢!
好像是漏装了fxp/composer-asset-plugin
运行 composer global require "fxp/composer-asset-plugin:~1.0.0"
,再试一下
使用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
花點時間看 有用的(雖然已經回復過 但英文版的更詳細)
事件不解除有什么影响?
好多事件,有什么好的管理事件(如:解除)?
事件多了肯定会影响性能,但是有利于程序扩展。
这儿有一些管理时间的方法:
http://www.yiichina.com/doc/guide/2.0/concept-events
大家好,有表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::widget([
'model' => $model,
'attributes' => [
'id',
[
'attribute'=>'img',
'img:image',
'format' => ['image',['width'=>'166','height'=>'166']],
],
],
]) ?>
img 已显示出图片,先需要当鼠标停在图片上显示图片的url。请各位大神赐教,谢谢。
这样?
你确定不报错
值是 0 ,1,2,4 这个我要显示中文怎么做呢
今天有个需求需要发送邮件使用了下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/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
view使用布局后在布局文件里拉取数据应该怎么写啊,我要在布局文件main.php中取得controllers中maincontroller.php的变量mphone的值。我写的Yii::$app->controller->mphone
报错
用 $this->params[]
比如,在 view 视图里,(注意:不是控制器,意味着你要先把变量传到视图里)定义 $this->params['mphone'] = 'iphone';
在 layout 布局里,就可以通过 $this->params['mphone']
来获得 iphone
yii2 里控制器里通过接口登录, 跳转到用户中心页面,数据库都不在本地都是访问的接口, 用户名保存到cookies中, 我想让他访问别的控制器中, 判断cookies用户名是否为空,为空就跳转到登录页面, 有办法每个控制器运行的时候都做下判断 cookies的用户吗?
@ony 报错原因,应该是 /user/login
方法所在的Controller
也继承了BaseController
!导致死循环了
如果你的cookie是Yii生成的,那么使用AccessController来控制。
否则,重写User。
yii不是自带了那个用户判断吗
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看看