谁一开始就是大神?

PHP 第51页

PHP

dataProvider提供的数据怎么导出全部数据[2.0]

Leofans阅读(52)

<?php
$columns = [
    '总收益',
    '总销量',
    '总下单',
    [
        'attribute'=>'总转换率',
        'value' => function($data){
                if($data['总下单'] != 0)
                    return sprintf("%.4f",$data['总销量']/$data['总下单'])*100 . '%';
        },
    ]
];
echo GridView::widget([
    'dataProvider' => $provider['sumData'],
    'columns' => $columns,
]);

?>
<?= ExportMenu::widget([ 'exportConfig' => [ ExportMenu::FORMAT_PDF => false ],
    'dataProvider' => $provider['sumData'],
    'columns' => $columns,
]);?>

第一个输出的是分页列表
第二个将数据导出excel格式
问题是:导出的时候只能导出分页的数据,怎么才能导出全部的数据

吧分页关了,pagination => false, 这样做的话,数据量太大的情况下加载时间会超长,你懂得。
遇到相同问题,看来解决方法一样,不知道有别的方法不? 一直以为yii2会提供一个方法类似getAllModels,看来目前还没有, 只有totalCount
$dataProvider->pagination = false;
$dataProvider->sort = false;

请教一下Yii2COOKIE已经设置过期时间打印出来显示为NULL[2.0]

Bobapple阅读(53)

1.jpg

2.png

这里有个重要的概念:cookie是存在于客户端的。
在你服务端对浏览器返回了创建cookie的header头时,浏览器则会根据服务端返回的cookie创建规则去创建cookie,规则中包含着name,value,expire等。 cookie的本质就是一个小小的纯文本文件。
而等到下次浏览器再次发起一个请求时,则会自动去客户端存在的cookie的集合中去寻找应当被通过 request header 发送到服务端的cookie。但是这个被发送的cookie并不包含expire。所以你打印 request header 中 cookie expire的结果为null。你可以理解为 被你用来打印请求 cookie expire的 request 组件代表着http协议的 request header。
对于服务端发送创建cookie的header到浏览器创建及发送cookie的交互过程,chrome的f12记录的一清二楚。
当然,如果你想要判断当前的cookie有没有过期,完全不需要通过你之前设置的过期时间去判断,因为cookie一旦过期。则不会被浏览器发送到服务器。你服务器根本就接受不到。当然,如果你实在需要一个类似于过期时间的东西,那么你可以把这个东西放入 cookie 的 value 中。毕竟cookie的value服务器是完全可以接收的。
我觉得这篇文章吊的不要不要的:
http://bubkoo.com/2014/04/21/http-cookies-explained/

如何自动切换生产环境和测试环境,不需要手动[2.0]

dmStone阅读(53)

其实就是怎么判断 测试环境

defined ( 'YII_DEBUG' ) or define ( 'YII_DEBUG', true );
defined ( 'YII_ENV' ) or define ( 'YII_ENV', 'dev' );

或者是生产环境

defined ( 'YII_DEBUG' ) or define ( 'YII_DEBUG', false );
defined ( 'YII_ENV' ) or define ( 'YII_ENV', 'PRODUCTION' );

參考 的作法
以下為 $_SERVER 的舉例
看你的生产环境和测试环境有什么不同;比如PHP_OS$_SERVER等等吧
两个方式吧
1 服务器方面:
如nginx 可以配置$_SERVER 变量为DEBUG = true,在程序中直接判断$_SERVER[‘DEBUG’];
2 PHP版本上
开发环境下 在php.ini下 添加 变量 DEBUG = true; php函数 get_cfg_var(‘debug’) == 1则为开发环境
不要去做这样的事情,多一些if就多一些性能损耗,而且这种损耗是不可避免的,因为你把判断放在了入口。
我认为最简单的方法是在线上环境放一个文件,如dev.lock,入口判断一下是否有这个文件,进行设置环境。只有一步判断,性能影响可以忽略不计。
当你的项目部署完毕,你不应当尝试去改动他的入口文件index.php。除非你的项目一天换一台服务器。
你应当把index.php从版本控制中去除,以保证push和pull时index.php不会受到本地或者线上环境的影响。
而事实上,托管于github的YII也确实这么做了。
我们之前会使用环境变量来处理这个问题

yii2dropdownlist[2.0]

momoKeo阅读(49)

yii2 dropdownlist
不选择,默认值为0,怎么设置呢?

yii2.0:登录界面提交表格后非正常提示[2.0]

fationlove阅读(49)

用户提交登录界面,提交用户表格后输出结果非model里面的message匹配内容?

LoginController.php代码如下:

<?php
namespace backend\controllers;

use yii\web\Controller;
use common\models\LoginForm;
use Yii;


class LoginController extends Controller{
    
    public $layout = 'login' ;
    
    public function actionIndex(){
        
        $model = new LoginForm();

            if($model->load(Yii::$app->request->post() && $model->validate())){
                return $this->redirect(['site/index']);
            }else{
            var_dump(Yii::$app->request->isPost);
            echo "<br>";
            var_dump($model->load(Yii::$app->request->post()));    
            echo "To be continued...";
            }
        
        return $this->render('index',['model' => $model]);
    }
  
}

然后是login/index.php的代码:

<?php
use yii\helpers\Html;
use Yii;

//http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html
$this->registerCssFile('@web/css/bslogin.css');

?>

<div class="container">
<?=Html::beginForm('','post',['class'=>'form-signin'])?>

        <h2 class="form-signin-heading">Please sign in</h2>

        <?=Html::activeInput('text',$model,'username',['id'=>'username','class'=>'form-control','placeholder'=>'用户名','autofocus'=>true])?>
        <?=Html::error($model,'username')?>

        <?=Html::activeInput('password', $model,'password',['id'=>'inputPassword','class'=>'form-control','placeholder'=>'密码'])?>
        <?=Html::error($model,'password')?>
        <div class="checkbox">
          <label>
            <input type="checkbox" value="remember-me"> Remember me
          </label>
        </div>
        <?=Html::submitButton('登入',['class'=>'btn btn-lg btn-primary btn-block'])?>
<?=Html::endForm()?>
</div>

最后的就是LoginForm:

<?php
namespace common\models;

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

class LoginForm extends Model{
    
    public $username;
    public $password;
    public $rememberMe = true;
    public $verification;
    
    private $user;
    //登录返回用户信息来储存,用于后面的session,cookies等
    
    public function rules(){
        return [
            [['username','password'],'required','message'=>'{attribute}必须要写入...'],
            ['username','validateUser'],
            ];
    }
    
    public function validateUser($attribute,$params){
        $user = User::findOne(['username'=>$this->$attribute]);
        if(!$user){
            $this->addError($this->attribute,'貌似有错误了额...');
        }   
    }   
}

User Model的部分代码:

    public function rules(){
        return [
            [['username','password','email'],'required','message'=>'{attribute}必须要填写哟,少年'],
            ['username','unique','message'=>'你落后了一步,{value}已经被占用'],
            ['email','email','message'=>'非邮箱地址'],
            ['password','string','min'=>6,'tooShort'=>'密码太短了...呵呵',],
            ['status','in','range'=>[0,1]],
            ];
    }

清空用户输入后,提交信息,输出两个错误信息(username & password),然后测试只输入用户名不输入密码,还是同样的错误信息,好像用户名那里[输入=没输入]一样。或者全部输入正确用户名及密码,页面也不进行跳转,这是何故?
截图为输入用户命和密码后的输出(控制器添加了var_dump()):
效果输出图

【疑问】引用User模型的rules不会跟LoginForm的rules冲突吧?

你的控制器
你的loginForm里面没validate();$model->validate()怎么用他呢?
还有你的loginForm继承model;那么不应该要指明表吗?,建议你继承user表;
至于你的疑问:继承user表,只要当前写了与被继承的模型一样的函数,只会覆盖,不会有冲突的。
输入正确的用户名和密码没有登录是因为你在你的Controller中没有进行登录操作啊~,不知道在你的loginform中有没有实现login方法,可以参考yii中自带的代码
LoginForm 的 rules 和 User 的 rules 并没有任何冲突。
你可以理解为
LoginForm 的 rules 是用于登录验证,通常包含用户名密码是否为空,用户名密码是否正确。
User 的 rules 是作用于 注册验证。比如用户名是否为空,长度为何,邮箱是否为空且是否符合格式等等。
唯一的联系就是LoginForm在进行密码校验时会用到User去执行数据库查询。
而你现在遇到的问题基本和User没有任何关系。请检查登录Form所对应的Model也就是LoginForm

YII2dropDownList下的prompt问题[2.0]

ecyfrog阅读(50)

在view下增加了一个dropDownList($Config, ['prompt'=>'Select...']) ?>
每次更新时如果选择的是prompt的话那么他的默认值就是NULL ,从而造成插入到mysql时无法更新
Column ‘xxx’ cannot be null,
我就想问有没有设置这个promot的默认值为0的,
我现在做的是model->save()的方法之前做判断
如果post过来的值为空的话,就将其设置为0,但我个人感觉这样做也太low了点。
不知道哪位有没有更好的一个方法

能想到的几种答案:
1.继承重写下dropDownList方法,将prompt的string值改成array
2.在beforeSave方法里头做判断填充值
3.数据库中将字段属性改为空
4.不用dropDownList,手动生成select
5.在rules里头直接分配默认值
为什么会无法更新。有rules()。
在rules里把它默认值设置成0
给你的数据data数据加个初始值,[0=>’select…’],不要用prompt不就可以了

post提交后依然跳转到提交过来的页面,或者post提交后只是刷新该页面而不跳转的解决方法[2.0]

Lihappy阅读(50)

QQ截图20160818014628.png

也就是说:level视图和index视图修改配置文件,都提交到edit方法里来处理,但是一个要跳转到level,一个要跳转到index。这就导致了不能公用的问题,还得多写一遍edit方法。
yii2中有什么方法可以像thinkphp中的$this->success(‘修改成功’,$_SERVER[‘HTTP_REFERER’])一样post表单提交后提示成功并且还回到原来的页面呢?

几种 化处理建议:
暂时根据你描述的想到的,不晓得能不能解决你问题,还是不行的话再讨论。
没有你说的这个方法,但是同样你也可以根据之前的页面,找到对应的方法啊
楼上正解,

yii2中如何开启SSL和SSL的使用!大神们求教[2.0]

Candyfrog阅读(49)

yii2中 如何开启SSL 和 使用SSL!求大神指教!我要做支付宝想用这个!

SSL是在PHP的扩展中开启,跟YII2有什么关系?看不懂
666!哈哈
无法加载扩展啊,你下载了SSL扩展了吗
无法加载扩展啊,你下载了SSL扩展了吗
或者说你的扩展下载对了吗

Yii框架怎么解决中文乱码问题?[2.0]

kenFox阅读(54)

中文字总是乱码 ,,谁能教教小白怎么解决呀。

什么地方乱码?在编辑器里还是在网页上?
编辑器的保存格式设定了吗?
字符集设置的问原因,不是框架的问题
汉字乱码是数据库查出来乱码还是说html输出的时候是乱码
客户端和服务端都要设置相同的字符集
页面乱码直接在配置文件中添加 'charset' => 'utf8'。还有就是浏览器的字符编码
统一字符集。看乱码显示的文字从哪里来。
直接是从页面源代码里来,请统一你的源文件本身的编码格式,源文件中指定的页面编码格式,浏览器查看网页是指定的编码格式。
从数据库中读取来的,那就再加一条,统一数据库中汉字的编码格式。
我感觉是文件编码的原因,你检查下文件存储的编码是不是一致的。
目前我还没遇到乱码问题
我也遇到同样的问题,应该是用开发工具修改php文档时直接保存了,没有保存成UTF-8的编码文档。
例如我用的是editplus软件,打开yii框架的PHP文档在editplus软件右下角看见文档的编码是ANSI,你可以双击那个显示编码的地方,会弹出修改编码的对话框,修改成UTF-8后,再去修改文档的代码(特别是中文),保存后就可以了。
还有一个更好的方法,就是把开发工具改成默认编码UTF-8方式,例如 editplus软件的修改方法http://jingyan.baidu.com/article/e5c39bf58c008c39d76033f6.html
我直接把 'charset' => 'utf8' 注释之后,结果中文显示出来了,我也很迷。

登录

找回密码

注册