谁一开始就是大神?

PHP 第66页

PHP

php/redis更新缓存的问题[2.0]

Lislim阅读(147)

if(!$redis->exists('cache')) 
{
    echo '写入缓存<br>';
    $sql = "select * from user limit 0,3";
    $rs = mysqli_query($connect,$sql) or die('db conn error');
    while( $result = mysqli_fetch_assoc($rs) )
    {
         array_push($results,$result);
    }

    $cache = json_encode($results);
    echo $cache;
    $redis->set('cache',$cache,1200);
}
else
{
    echo '读取缓存<br>';
    echo $redis->get('cache');
}

问题:
如果我在后台修改了user某个id的name值,或者添加、删除了 如何去实时更新缓存?

是不是应该在后台update/delete操作里面去更新缓存?

比方我有一百条数据 是不是就因为update了一下某个值,就去做一次更新缓存.这样是不是不好.

通常都是这样做的。当然你也可以用缓存依赖来实现,不用自己维护缓存更新。

在插入数据库之前处理字段?[2.0]

lionslim阅读(78)

$model = new Admin();
if ($model->load(\Yii::$app->request->post()) && $model->save()) {
    return $this->redirect(['index']);
} else {
}

$model->save() 之前我要对字段进行加密处理,听说有个beforesave方法,死活找不到在哪,怎么用? 求教

你可以看下 BaseActiveRecord
862891 行有示例用法
有的啊。。。
在其对应的model类里面添加一个beforeSave()方法 ,具体怎么实现二楼已经贴出了代码
。。。。。。
$model->validate() //这个是验证数据
验证数据以后 也就是数据通过规则验证了 此时我们在修改对象Model的属性
然后在 $model->save(false) 因为是自己修改的,就不需要再次验证了。直接保存即可,。

yii2怎么将登陆页面独立处理而不是显示在主页里面?[2.0]

Nobleyak阅读(83)

就是将一打开主页显示的是登陆页面,而不是主页的右上角有个登陆的按钮怎么做?

自己在views/layouts里面写一个登陆页面
然后在控制器方法里面用$this->layout = ‘自定义登陆页面文件’ 例如 $this->layout=’login’
最后
输出页面
面。111
自己写一个单独的登录页面就行

$_GET['test']会报错[2.0]

Candyyak阅读(72)

我知道yii可以用 yii::$app->request->get() 获取所有的get参数

但是为什么我直接打印 Print_r($_GET['test']); 的时候报错

PHP Notice – yii\base\ErrorException

Undefined index: xp

我记得1里面是没有这样报错的 是不是有什么地方设置?

$_GET数组中没有xp这个键 你使用了当然会有警告
请问你在哪个地方打印$_GET的,$_GET真正被处理的时候在这里,假设是基于?r=这样子的
我在windows下不会报错,但如果放在服务器端,就会出错,可能跟php环境有问题,类似的问题可能还会有好几个地方。
所以在使用post和get接收数据的时候,首先是使用Yii::$app->request->get() Yii::$app->request->post(),如果使用过一次之后,获取其他参数也可以使用$_GET$_POST
当然会报错了,要自己做判断 ,所以不建议直接用$_GET $_POST 而是用yii封装好的方法
用框架提供的request,存在必然有道理

在最新的2.0.7的migrate中,怎样为一个字段添加备注?[2.0]

Harryhope阅读(76)

之前的版本实现:

'phone' => Schema::TYPE_INTEGER . '(11) NOT NULL COMMENT "备注"'

2.0.7

'phone' =>$this->integer([11])->notNull()->?

看了下源码,最终会调用:yii\db\QueryBuilder的createTable方法
他举了个例子:
也就是数组中的key会作为字段,value作为类型,然后得看这个方法getColumnType
他首先判断传过来的类型是不是ColumnSchemaBuilder这个对象,如果不是,做一些正则判断,最终返回一个字符串,那反正最终就是构成一个合法的字段声明, 比如:
那你可以试试,在构建的时候,直接这样做:
这样应该也是可行的。具体需要你去试试。
2.0.7不支持之前版本的实现了?是不能那样用了吗?
你是不是希望有个->comment('xxx')方法啊 哈哈,好吧,这种非标准的语法不兼容其他数据库,所以yii没提供,只能自己按照你前一种写了,
之前的方法还能接着用吧?
不错,’username’ => $this->string(32)->notNull()->unique().” COMMENT ‘管理员账号'”,
这样果然实现了 坐等2.0.8

如何遍历查询结果[2.0]

likelyKeo阅读(80)

$query = $command->queryAll() 获取了sql查询结果,然后render给前端,
前端用 foreach($query as $value) 显示$value->id 时出错:Trying to get property of non-object
如果用模型获取数据(Models::find())进行遍历是没有问题的,但我想用自定义的sql语句查询结果进行遍历,该怎么做?

你用原生sql查询出来的结果,应该是数组,所以,问题不是不能遍历,而是你应该取数组的值,比如$value[‘id’],而不是$value->id,最好的验证方式,就是你在render给前端前,var_dump出来看看查询出来的结果的数据格式。然后根据格式在前端用相应的方式遍历取值即可

获取不到微信服务post的xml数据[2.0]

BraveFox阅读(68)

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];获取不到微信服务器post给我的xml数据
在网上查了下另一种写法
$postStr = file_get_contents('php://input');就可以获取到了
什么原因?
这个$GLOBALS是可以打印的,应该不是register_globals禁止的问题吧

xml的content-type是application/xml,$_POST($GLOBALS["HTTP_RAW_POST_DATA"])都只能解析Content-Type:application/x-www-form-urlencodedContent-Type: multipart/form-data,而php://input的内容包括除了header之外的所有请求内容,无论任何content-type

怎么限制usermodule必须登录才能访问[2.0]

Elliesuper阅读(67)

frontend/modules/user/Module.php
namespace frontend\modules\user;
class Module extends \yii\base\Module
{
    public $controllerNamespace = 'frontend\modules\user\controllers';

    public function init()
    {
        parent::init();

        //该模块必须登陆用户访问
        if (\Yii::$app->user->isGuest){
            return \Yii::$app->response->redirect(\Yii::$app->homeUrl);
        }

        return true;
    }
}
return \Yii::$app->response->redirect(\Yii::$app->homeUrl);

这端代码能执行,就是不能跳转

下面是在controller里面实现的逻辑
Application.php

public function beforeAction($action)
{
        if (!parent::beforeAction($action)) {
            return false;
        }

        if (Yii::$app->user->isGuest){
            return $this->redirect(['site/index']);
        }

        return true;
}

同样能执行到跳转这边,就是跳转不来

解决方案

user module 所有controller都会继承该ApplocationController

<?php
namespace frontend\modules\user\controllers;

use Yii;
use yii\web\Controller;

class ApplicationController extends Controller
{
    public function beforeAction($action)
    {
        if (!parent::beforeAction($action)) {
            return false;
        }

        if (Yii::$app->user->isGuest){
            return $this->goHome()->send();//这边需要家send(),不然无法跳转,Yii 2.0.7
        }

        return true;
    }
}

个人感觉逻辑不太对,登录认证应该在控制器中就控制了,而不是应该在模型中去判断,请求肯定是先到控制器,然后对应的action中进行处理,action负责加载一个数据模型,一般是从数据库中加载。那么,如果这个用户没有登录,应该在加载模型之前就判断好
return $this->goHome();
module.php
可以实现跳转。
我的头头解释的。
redirect可能有点类似于异步,在本地速度快,马上返回了302跳转,然后再return
线上网速慢,本地还没收到302跳转,就return了,init收到return后,就会继续往下执行

使用\Yii::$app->user->isGuest;登陆前状态为1登陆后如下报错[2.0]

Bobdear阅读(76)

使用\Yii::$app->user->isGuest; 登陆前状态为1 登陆后 重新返回刷新登陆页面 就以下报错
没有user表,我数据库表是users。但是这个user是在哪里调用的?
Database Exception – yii\db\Exception

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'qichunzhan.user' doesn't exist
The SQL being executed was: SELECT * FROM `user` WHERE (`id`='1') AND (`status`=10)
Error Info: Array
(
    [0] => 42S02
    [1] => 1146
    [2] => Table 'qichunzhan.user' doesn't exist
)
↵
Caused by: PDOException

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'qichunzhan.user' doesn't exist

in /Users/chenqi/NetBeansProjects/WEB/GitOschina/qichunzhan/vendor/yiisoft/yii2/db/Command.php at line 839

去User模型里把表改成users
那个user表最好不要动,楼主,除非熟悉了再动,我吃过很多亏.
应该在 common/models/user.php 在这里看看登录的
也有可能在你的loginform里面

yii2怎么设置网站logo?[2.0]

youthpony阅读(72)

yii2 怎么设置网站logo

在/layouts/main.php中如下定义
我的为什么不行啊,还是yii自带的logo
已解决,谢谢

登录

找回密码

注册