谁一开始就是大神?

PHP 第21页

PHP

Gii的CURD生成无法访问?[2.0]

lovelyJames阅读(53)

同样的一个product表,其他设置都一样(因为有浏览器表单缓存的存在,所以绝对不会命名空间,文件名发生错误),改成producttype就访问不了了,表名product可以访问的.请教高手,可能出现在什么地方?我也不知道贴什么代码..

exception ‘yii\base\InvalidRouteException’ with message ‘Unable to resolve the request “producttype/index”.’ in E:\www\yii_ad_test\vendor\yiisoft\yii2\base\Module.php:532
Stack trace:
#0 E:\www\yii_ad_test\vendor\yiisoft\yii2\web\Application.php(102): yii\base\Module->runAction(‘producttype/ind…’, Array)
#1 E:\www\yii_ad_test\vendor\yiisoft\yii2\base\Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#2 E:\www\yii_ad_test\backend\web\index.php(17): yii\base\Application->run()
#3 {main}

Next exception ‘yii\web\NotFoundHttpException’ with message ‘页面未找到。’ in E:\www\yii_ad_test\vendor\yiisoft\yii2\web\Application.php:114
Stack trace:
#0 E:\www\yii_ad_test\vendor\yiisoft\yii2\base\Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 E:\www\yii_ad_test\backend\web\index.php(17): yii\base\Application->run()
#2 {main}

改成producttype?
在哪里改的?你生成的文件名称又是什么?
ProductTypeController 对应的前台访问路径是 product-type/index
producttype/index? product-type/index?
看下控制器是ProducttypeController 还是ProductTypeController
producttype这个命名有问题吧,驼峰命名啊
yii2规定驼峰命名的controler,action必须将大写字母转成-中划线!

yii语言包的问题[2.0]

JasonCherry阅读(53)

在frontend>messages里建了个中文语言包,为什么在frontend>model里的表单模型中无法使用?’id’=> Yii::t(‘common’,’ID’), 说Yii 是未定义的类?求大神这是咋回事啊?

皆可 记得大小写
\Yii

ueditor上传图片为什么只显示文件名字呢?[2.0]

Markdolphin阅读(51)

2017-06-06_105243.png

在controller里actions配置imageRoot就只显示名字,不设置就显示图片

  return [
            'upload' => [
                'class' => 'kucha\ueditor\UEditorAction',
                'config' => [
                    //"imageUrlPrefix"  => "http://www.baidu.com",//图片访问路径前缀
                    "imagePathFormat" => "/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}" ,//上传保存路径
                     "imageRoot" => Yii::getAlias("@image"),

            ],
        ]

打开你的控制台,看看服务器返回的状态值

mysql插入数据问题请大神教[2.0]

Noblehappy阅读(53)

models 下面 index.php
<?php
namespace Api\models;
use Yii;
use yii\db\ActiveRecord;
Index extends ActiveRecord
{

public static function tableName()
{
	return '{{%index}}';
}

/**
 * 添加消息
 */
public function add($data) 
{
    $this->setAttributes($data, false);
    var_dump($this->save());
    if($this->save()) 
		return Yii::$app->db->getLastInsertID();
	return false;
}

}
在控制里面操作
$indexDao = new Index();
$indexDao->add([‘userId’=>1, ‘idType’=>1, ‘idVal’=>1, ‘createTime’=>1496750748]);
$indexDao->add([‘userId’=>2, ‘idType’=>2, ‘idVal’=>2, ‘createTime’=>1496750748]);
同时插入两条数据 但只能第一条成果 第二条 第三条。。。无法插入了呢
把 add 方法改成

public function add($data) 
{
    return self::getDb()->createCommand()->insert('pao_index', $data)->execute();
}

就可以正常插入多天 啥情况呢?

首先,不能保存的问题楼上已经说了.
其次,如果需要保存多条记录,不建议每次都new 实例化一次..可以直接使用batchinsert,类似
这样一次插入多条数据.
你都new出来实例了,还想多次add是不行了,只能一次啊,如果想多条插入还用model的话,可以这样:
有 量插入的方法不是
按照OO的规则,多次插入应该使用DAO模式或者静态方法吧,如果New过了,就无法插入多次了,我记得是这样,参见Yii的 UpdateAll方法
很明显,下面的代码是批量插入,必须成功
Yii的activeRecord模型有一个标记就是当前模型是否是新模型。当你new Index()的时候是一个新模型,save完成之后就会变成旧模型,save方法调用的时候会判断是旧的还是新的,如果是新的执行insert操作,如果是旧的会执行更新操作。如果想用模型的方法不断插入新纪录,需要循环初始化新模型,再赋值保存。是否是新模型参见方法BaseActiveRecord::getIsNewRecord();
学习了,YII道路漫长啊
66666666666666

Yii2高级复制新项目出现报错[2.0]

kencrab阅读(55)

做法如下:
1、cp -r backend api
2、把api里的backend关键字替换成api

加了别名配置也一样错误 Yii::setAlias(‘api’, dirname(dirname(DIR)) . ‘/api’);

报错如下

exception ‘yii\base\InvalidRouteException’ with message ‘Unable to resolve the request “site/error”.’ in /Users/trylife/demo/vendor/yiisoft/yii2/base/Module.php:461
Stack trace:
#0 /Users/trylife/demo/vendor/yiisoft/yii2/web/ErrorHandler.php(80): yii\base\Module->runAction(‘site/error’)
#1 /Users/trylife/demo/vendor/yiisoft/yii2/base/ErrorHandler.php(95): yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException))
#2 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\NotFoundHttpException))
#3 {main}
Previous exception:
exception ‘yii\base\InvalidRouteException’ with message ‘Unable to resolve the request “”.’ in /Users/trylife/demo/vendor/yiisoft/yii2/base/Module.php:461
Stack trace:
#0 /Users/trylife/demo/vendor/yiisoft/yii2/web/Application.php(83): yii\base\Module->runAction(”, Array)
#1 /Users/trylife/demo/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#2 /Users/trylife/demo/api/web/index.php(18): yii\base\Application->run()
#3 {main}

Next exception ‘yii\web\NotFoundHttpException’ with message ‘Page not found.’ in /Users/trylife/demo/vendor/yiisoft/yii2/web/Application.php:95
Stack trace:
#0 /Users/trylife/demo/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 /Users/trylife/demo/api/web/index.php(18): yii\base\Application->run()
#2 {main}

给一点思路
第一 common/config/bootstrap.php 里面要增加 api 这个alias
第二 api/config/main.php 要修改默认的 namespace
第三 api/controllers/.php api/models/.php 里面的namespace都需要修改
看这里
namespace

如何循环合并数组

Hazellovely阅读(51)

比如有这样一个数组$arr = [['a'=>1,'b'=>2],['a'=>3,'b'=>4],['a'=>5,'b'=>6]]
变成$arr = [['a'=>[1,3,5],'b'=>[2,4,6]]]
效果相当于array_merge_recursive(['a'=>1,'b'=>2],['a'=>3,'b'=>4],['a'=>5,'b'=>6])
用循环来合并

66666666666666

Yii2关联事件求一个简单的demo或者导[2.0]

Aibybubble阅读(60)

应用场景:用户点击帖子收藏

基本流程:点击收藏后,数据表中添加一个当前帖子的收藏记录

事件触发:
1、帖子的收藏数+1
2、用户的积分+1
3、发送给帖子作者收藏通知

关联事件:
用户积分+1后又触发用户积分添加日志事件

疑问:
1、上述的描述是否正确?
2、用户积分+1后,如何再次触发积分添加日志事件?

事件的使用分三步:
在 init() 内绑定是一种常见的方法,好处是打开 AR 模型文件后,通过查看 init() 内绑定的事件就能快速了解事件触发后,都执行了哪些操作。还有一种绑定方式是动态绑定,即在逻辑代码内动态地完成绑定和触发操作。两种绑定方法有不同的使用场景,在 init() 内绑定适合那些通用的操作;动态绑定更加灵活,适合特定情况发生时的一些操作。
以你的应用场景为例,里面涉及两个事件:用户点击收藏按钮和积分发生变化,假设分别定义为 EVENT_AFTER_CLICKED_LIKE_BUTTONEVENT_AFTER_POINT_CHANGED,之后定义四个 handlers:
这四个 handlers 都适合放在 init() 内绑定,因为这些操作适合所有收藏帖子的行为。但是假设你想再加一个功能——如果积分 +1 后用户的积分达到 100 分,将用户所属的用户组由“普通用户”改为“高级用户”,这个操作就不能在 init() 内绑定,而应该使用动态绑定的方法,因为并不是所有点击收藏后都会触发更改用户组操作,还要判断用户的积分是否达标。
上面我假设的这种情况可以再定义一个”用户积分达到 100″ 的事件(假设为 EVENT_POINT_REACHED_100),再定义一个 upgradeUserGroup() handler, 用来升级用户组。
动态绑定很简单,记住先绑定、后触发的原则即可,代码示例:

YiiChina官网个性化时间是内置功能还是自己写的?[2.0]

AibyJames阅读(57)

官网发帖的个性化时间显示几分钟,几小时,1天前,2天前,超过2天好像就显示日期了。

Yii自带的有asRelativeTime,可以实现几分钟,几小时,几天前,但是也有个弊端就是一直这样显示,直到显示1年前,N年前。

想知道官网的这个是如何实现的?自定义的吗?还是Yii内置功能需要二次配置参数?

我用自己写的方法,如下:
https://github.com/briannesbitt/Carbon
我的回答不是为了说明什么,就是为了说明 说的是最佳实践。Carbon解决这类问题简直不能再合适了
http://carbon.nesbot.com/docs/

上传excel文件,怎么解决wps的excel验证不通过的问题[2.0]

HaHhope阅读(53)

上传文件处理的UploadForm.php

<?php
namespace common\models;

use yii\base\Model;
use common\helpers\CommonFun;

class UploadForm extends Model
{
    const UPLOAD_FILE = 'file';//上传文件
    const UPLOAD_IMAGE = 'image';//上传图片

    public $inputFile;
    public $imageFile;

    public function scenarios()
    {
        return [
            self::UPLOAD_FILE => ['inputFile'],
            self::UPLOAD_IMAGE => ['imageFile'],
        ];
    }

    public function rules()
    {
        return [
            [
                ['inputFile'],
                'file',
                'skipOnEmpty' => false,
                'extensions' => ['txt', 'zip', 'pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', '7z', 'gz'],
                'on' => 'file'
            ],
            [
                ['imageFile'],
                'image',
                'skipOnEmpty' => false,
                'extensions' => 'png, jpg, gif, jpeg',
                'on' => 'image'
            ],
        ];
    }

    /**
     * upload file
     * @author 
     * @dateTime 2017-05-04T19:28:13+0800
     * @param    string $target the upload directory
     * @param    string $fileName the uploaded file name
     * @return   mix
     */
    public function upload($target = NULL,$fileName = NULL)
    {
        if ($this->validate()) {
            //$target = $target ? $target :  Yii::getAlias('@uploads') . '/'. date("Ym");
            if ($this->inputFile != NULL) {
                $extension = $this->inputFile->extension;
            } else {
                $extension = $this->imageFile->extension;
            }
            $target = $target ? $target : $this->setDefaultUploadDir($extension);
            $dir = getcwd() . '/' . $target;
            if(!file_exists($target)) {
                CommonFun::recursionMkDir($target);
            }
            $fileName = $fileName ? $fileName : CommonFun::createUniqueStr();
            $saveName = $dir . '/' . $fileName . '.' . $extension;
            if($this->inputFile != NULL) {
                $this->inputFile->saveAs($saveName);
            } else {
                $this->imageFile->saveAs($saveName);
            }
            $resultUrl = $target . '/' . $fileName . '.' . $extension;
            return $resultUrl;
        } else {
            return false;
        }
    }

    /**
     * 设置默认的上传目录
     * 根据各个应用生成目录
     * @author 
     * @dateTime 2017-05-24T09:21:38+0800
     * @return string 上传路径
     */
    public function setDefaultUploadDir($extension = NULL)
    {
        $uploadDir = "uploads/" . date("Ym");
        if ($extension) {
            $uploadDir .= '/'. $extension;
        }
        if(!file_exists($uploadDir)) {
            CommonFun::recursionMkDir($uploadDir);
        }
        return $uploadDir;
    }
}

上传文件为test.xlsx
wps版的mimeType为application/octet-stream
office版的mimeType为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
yii的验证机制是根据上传文件的mimeType来匹配对应的extension列表,然而xlsx已经被使用了,我不能再加个xlsx的键值对
在不改源码的基础上怎么让wps文件通过FileValidator的验证

按照你的思路应该动这块吧
WechatIMG1.jpeg
??????????
我做Excel的时候也发现了这个问题,后来我把验证规则MimeType验证关闭了.
后来自己根据文件类型写了个验证规则
这是我的验证规则
这是我抓的我mime,自己简单写了个方法,虽然受限制,但是对我项目实用
源码是这么对应的

登录

找回密码

注册