谁一开始就是大神?

PHP 第76页

PHP

Yii执行的sql问题[1.1]

Bellasuper阅读(33)

CDbCommand 无法执行 SQL 语句: SQLSTATE[HY000]: General error. The SQL statement executed was: DROP TABLE
 IF EXISTS `generate_number`;

这个把这句话复制到createCommand上面也不行,这个是那里的错误?

可以看下你配置的连接数据库的用户是否有删除表的权限。
sql内容是什么?

Yii2.0三级联动求助[2.0]

ACGFox阅读(34)

按照,这个帖子http://www.yiichina.com/tutorial/468 三级联动,但是只有第一级有数据,后面两个都是没数据,请大家帮我看一下。
1.jpg

我是这样做的:
1.建立了数据表

/*
Navicat MySQL Data Transfer

Source Server         : MySQL
Source Server Version : 50624
Source Host           : localhost:3306
Source Database       : yii2advanced

Target Server Type    : MYSQL
Target Server Version : 50624
File Encoding         : 65001

Date: 2015-07-13 14:27:12
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for yii2_city
-- ----------------------------
DROP TABLE IF EXISTS `yii2_city`;
CREATE TABLE `yii2_city` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `pid` smallint(5) unsigned NOT NULL DEFAULT '0',
  `name` varchar(120) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`pid`)
) ENGINE=MyISAM AUTO_INCREMENT=3410 DEFAULT CHARSET=utf8;

2.我有一个用到省市联动的表tms_course,我利用gii生成Model生成了2个 一个是Course,一个是城市City,下面是Course Model,在里面加入了getCityList($pid)

<?php

namespace app\models;

use Yii;
use \yii\helpers\ArrayHelper;

/**
 * This is the model class for table "{{%course}}".
 *
 * @property integer $id
 * @property string $college
 * @property string $profession
 * @property string $squad
 * @property string $teacher
 * @property string $subject
 */
class Course extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%course}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['college', 'profession', 'squad', 'teacher', 'subject'], 'required'],
            [['college', 'profession', 'teacher', 'subject'], 'string', 'max' => 50],
            [['squad'], 'string', 'max' => 6]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'college' => 'College',
            'profession' => 'Profession',
            'squad' => 'Squad',
            'teacher' => 'Teacher',
            'subject' => 'Subject',
        ];
    }

    /**
     * @param $pid
     * @return array
     */
    public function getCityList($pid)
    {
        $model = City::findAll(array('pid'=>$pid));
        return ArrayHelper::map($model, 'id', 'name');
    }
}

3.我将如下代码加入了控制器action

    /**
     * Function output the site that you selected.
     * @param int $pid
     * @param int $typeid
     */
    public function actionSite($pid, $typeid = 0)
    {
        $model = new Member();
        $model = $model->getCityList($pid);

        if($typeid == 1){$aa="--请选择市--";}else if($typeid == 2 && $model){$aa="--请选择区--";}

        echo Html::tag('option',$aa, ['value'=>'empty']) ;

        foreach($model as $value=>$name)
        {
            echo Html::tag('option',Html::encode($name),array('value'=>$value));
        }
    }

4.我新建了一个控制器用于调用联动

    public function actionCourse(){
        $model = new Course();
        return $this->render('course',['model' => $model]);
    }

5.我建立了action Course的View,以下是Vies course.php的代码

<?php
use yii\bootstrap\ActiveForm;

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
?>

<?php $form = ActiveForm::begin(['enableClientValidation' => false]);?>

<?= $form->field($model,'province')->dropDownList($model->getCityList(0),
    [
        'prompt'=>'--请选择省--',
        'onchange'=>'
            $(".form-group.field-member-area").hide();
            $.post("'.yii::$app->urlManager->createUrl('site/site').'&typeid=1&pid="+$(this).val(),function(data){
                $("select#member-city").html(data);
            });',
    ]) ?>

<?= $form->field($model, 'city')->dropDownList($model->getCityList($model->province),
    [
        'prompt'=>'--请选择市--',
        'onchange'=>'
            $(".form-group.field-member-area").show();
            $.post("'.yii::$app->urlManager->createUrl('site/site').'&typeid=2&pid="+$(this).val(),function(data){
                $("select#member-area").html(data);
            });',
    ]) ?>
<?= $form->field($model, 'area')->dropDownList($model->getCityList($model->city),['prompt'=>'--请选择区--',]) ?>
<?php ActiveForm::end();?>

最后运行的时候有问题,只能调用一级联动,后面的都是空的取不到数据,请大神看一下,多谢!

只能一级一级测试,谁也不知道你代码怎么写的,不可能凭这个代码就能看出错误来,最重要的还是自己去调试
代码太长…
你分两头测试,看选了一级后,处理二级的函数能否正确获取一级信息。
再手动指定一个一级数据,看二级数据能否正常显示。
只有这一张表吗,其他表结构是什么样的啊
我也在学这个
请问楼主
$form->field($model,’province’)
这个 province,从哪里来的?
请问楼主这个问题解决了吗?
我也出不来。

高级模板下前台如何调用后台的model[2.0]

acgelephant阅读(30)

因为前台有些操作需要用到model类,和后台操作一致,不想在前台再创建一次model,
有没有什么方法是直接可以调用后台model的。。。。

use 相应model 不行?

关于dropDownListvalue的问题[2.0]

SlyLion阅读(28)

我的view代码是这样的

<?= $form->field($model, 'catid')->dropDownList(ArrayHelper::map(,'id','name'))->label(false); ?>

但前台显示value的值并不是id的值,而是1,2,。。。。

1,2 是哪来的? name? 还是你生成的数组中的?

前端如何设计,好跟yii2配合使用[2.0]

ecyStone阅读(29)

见过好多网页,比如github,非常方便操作,但是yii2默认的页面操作不是很方便,可有啥样的技术方便美化web页面呢?

div+css?
怎么才算好看每个人都有自己的见解。
前端设计无所谓跟yii2配合吧,一个设计出来,用随便哪个常见的框架去实现都不应该有问题。

单元测试[2.0]

HarryStag阅读(32)

有没有那位大神写过yii2的单元测试codeception的,能不能说下这个怎么在yii2项目下运行,codeception除了官网外,有没有详细的单元测试文档啊,求推荐一个网址

见这个文章:http://hustnaive.github.io/php/2015/06/16/work-with-yii-and-codeception.html
codeception很好很强大,但是,如果只是单元测试的话,建议直接用phpunit,稍微简单些。codeception配置较为麻烦。

设置了urlManager后gii不能访问[2.0]

Graceseagull阅读(32)

我在web.php里美化Url

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,//隐藏index.php
    //'enableStrictParsing' => false,
    //'suffix' => '.html',//后缀,如果设置了此项,那么浏览器地址栏就必须带上.html后缀,否则会报404错误
    'rules' => [
        //'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
        '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    ],
],

之前没加的时候 访问http://localhost/basic/web/index.php?r=gii是可以跳转到生成模型界面的,自从加了上面代码就一直在主界面,gii访问不了了
我试着去掉 'enablePrettyUrl' => true,就可以了
不知道什么原因??

setting enablePrettyUrl = true
a.Apache 設定 DocumentRoot 指向 “YourPath…/basic/web”
a.在你的 網址填入 http://localhost/gii
b.不然看你 DocumentRoot 都沒指向 自己打上 /basic/web
b.在你的 網址填入 http://localhost/basic/web/gii
那就试试 http://localhost/basic/web/gii 估计不行;把web作为documentroot
去看一下 yii2 documentaction 的介紹!!
http://www.yiiframework.com/doc-2.0/yii-web-urlmanager.html#$enablePrettyUrl-detail
enablePrettyUrl : 意思就是美化 URL
如果為 true 則 URL 可以用路徑代表參數 反之
如果為 false 是用參數代表路徑的方式
可参考我的做法
这个时候直接访问http://localhost/gii.html就行
遇到同样问题,请问您当时是怎么解决的呢?
必须是 'xxx.../gii.html' 而不是'xxx.../gii' ,因为使用了'suffix' => '.html'

addFlash()的内容不能被正常销毁

Cindydolphin阅读(30)

正常情况下addFlash()添加的内容会在getFlash()之后被销毁,然而这两天在将 YII_ENV 参数配置为 prod(web/index.php : defined('YII_ENV') or define('YII_ENV', 'prod');) 之后发现自动销毁失效,添加的内容会一直存在,后来逐步检查,进一步发现是问题出在config/web.php:

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        #'password' => 'gii',
        'allowedIPs' => ['127.0.0.1', '10.0.0.*', '*.*.*.*'] // 按需调整这里
    ];
}

prod模式下没有加载debug模块,在手动加载debug模块之后,flash的销毁恢复正常。
即 启用这两行代码:

$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = 'yii\debug\Module';

找了半天没发现debug module 和 flsah,session之间有什么关系,不理解,不科学,故求助各位~~

flash内容存储在session中, 和debug module没什么关系.
addFlash('a', 'b') 之后, 再getFlash('a')之后, 是可以销毁这条消息.
但是 : 是在下次请求中销毁, 本次请求的后续处理中还存在.
在vendor\yiisoft\yii2\web\Session.php中是有两处调用$this->updateFlashCounters();的,我在慕课网看的yii电商教程老师给的代码少了一行,就导致getFlash一直能够获取值

关于csrf的问题[2.0]

Bravesea阅读(33)

在YII2 里面,不论是 get 还是 post,都对进行csrf验证,现在,我遇到的问题是,从接口返回的数据不携带上传过去的csrf验证,这种情况下,如何设置csrf的验证,关闭或者是怎么办?

可以在控制器里加一行:
从接口返回的数据,是指第三方异步调用你提供的restFulapi回调服务么?我这边也做过类似这种,场景是微信公众号的回调接口,当用户给公众号发消息的时候,微信服务器会自动往我提供的回调接口推送消息。我是直接针对这个action关闭掉csrf验证。具体就是设置controller::enableCsrfValidation 为false,这样,某个controller访问时,就不会做csrf验证了。
关闭单个action的csrf验证就行了。
在action中添加
原来的贴的方法不是2.0的。
如果要所有的都关闭,可以配置全局(不建议)
可以那个控制器需要配置哪一个!
楼上的 public $enableCsrfValidation = false; 就可以!
在方法里添加$this->enableCsrfValidation = false;
123456

登录

找回密码

注册