Wiki
本教程基于主从服务器数据库同步完成之后,在 yii2 中配置如下,即可实现 Yii2.0 的数据库读写分离 1.打开我们的数据库配置文件common\config\main-local.php在db属性中做如下配置 'db' => [ 'class' => 'yii\db\Connection', // 配置主服务器 'dsn' => 'mysql:host=192.168.0.1;dbname=hyii2', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', // 配置从服务器 'slaveConfig' => [ 'username' => 'root', 'password' => 'root', 'attributes' => [ // use a smaller connection timeout PDO::ATTR_TIMEOUT => 10, ], 'charset' => 'utf8', ], // 配置从服务器组 'slaves' => [ ['dsn' => 'mysql:host=192.168.0.2;dbname=hyii2'], ], ], 如上配置就能实现yii2数据库读写分离的操作,很简单,只要一个配置就ok了,读写分离的功能由后台代码自动完成.调用者无须关心。 上面只是一个1主1从的配置,如果要一主多从,或者多主多从,参考此例以及官方文档即可完成。
25天前 喜欢(0) 浏览(262) 评论(3)
Wiki
在页面中添加 Modal 组件 <?php use yii\bootstrap\Modal; Modal::begin([ 'id' => 'page-modal', 'header' => '<h5>这里是标题</h5>', 'toggleButton' => ['label' => 'click me'], ]); echo '这里是模态内容...'; Modal::end(); ?> 添加出发按钮 <?= Html::a('点击按钮', '#', [ 'class' => 'btn btn-success', 'data-toggle' => 'modal', 'data-target' => '#page-modal' //此处对应Modal组件中设置的id ]) ?>
1月前 喜欢(1) 浏览(199) 评论(3)
Wiki
如何在yii2表单中添加验证码?非常简单,只需要在yii2项目中做几个简单的配置就可以完成验证码的应用,yii2默认封装了许多扩展,验证码就是其中之一,那么下面就来为大家演示一下如何配置yii2的验证码 先看下验证码效果: 配置 首先,在要实用验证码的控制器(Controller)中添加下面的代码 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, ], ]; } 然后在对应的form中添加rules规则,如下图
4天前 喜欢(0) 浏览(55) 评论(2)
Wiki
1.视图页面直接加载 $css = <<<CSS p {text-indent:5em;} div{width: 500px;} CSS; $this->registerCss($css,['type'=>'text/css'],'test'); $js = <<<JS // console.log('sss'); JS; $this->registerJs($js); 视图页面直接加载css,js文件 $this->registerJsFile('@web/assets/js/site.js'); $this->registerCssFile('@web/assets/css/site.css');
12天前 喜欢(0) 浏览(91) 评论(0)
Wiki
yii2 Carousel是一个基于JavaScript的图片轮播组件,使用Carousel可以快速的在网站任意位置放置一个图片轮播的效果 先看下效果: 代码如下: <?php echo Carousel::widget([ 'items' => [ // 只有图片的格式 '<img src="http://www.yii-china.com/statics/images/b_1.jpg"/>', // 与上面的效果一致 ['content' => '<img src="http://www.yii-china.com/statics/images/b_1.jpg"/>'], // 包含图片和字幕的格式 [ 'content' => '<img src="http://www.yii-china.com/statics/images/b_1.jpg"/>', 'caption' => '<h4>This is title</h4><p>This is the caption text</p>', //'options' => [...], //配置对应的样式 ], ] ]); ?> 在轮播幻灯片列表。每个数组元素的可配属性 [ // 必要的,轮播的内容(HTML),比如一个图像标签 'content' => '<img src="http://www.yii-china.com/statics/images/b_1.jpg'/> // 可选的,该轮播标题(HTML) 'caption' => '<h4>This is title</h4><p>This is the caption text</p>', // 可选的,轮播样式 'options' => [], ]
15天前 喜欢(0) 浏览(121) 评论(0)
Wiki
以高级版为例:打开配置文件 /frontend/config/main.php 添加以下配置: return [ ··· 'defaultRoute' => 'topic/index', ··· ]
17天前 喜欢(0) 浏览(111) 评论(0)
Wiki
事务在程序应用中使用非常广泛,现在提供一个 Yii2 数据库事务使用的简单示例,让大家了解在 Yii2 中如何使用数据库事务 $transaction = Yii::$app->db->beginTransaction(); try { $connection->createCommand($sql1)->execute(); //如果执行失败则抛出错误 if(status == false) throw new \Exception('这里是错误原因'); $connection->createCommand($sql2)->execute(); //只有执行了commit(),对于上面数据库的操作才会真正执行 $transaction->commit(); }catch (Exception $e) { //获取抛出的错误 $error = $e->getMessage(); //操作回滚 $transaction->rollBack(); }
22天前 喜欢(0) 浏览(142) 评论(0)
Wiki
查询一个作者(Author)写的所有书籍(Book),其中Author 和 Book 是对应的 Model 作者模型:Author Class Author extend \yii\db\ActiveRecord { ··· public function getBook() { return $this->hasMany(Book::className(), ['author_id'=>'id']); } ··· } 书籍模型:Book Class Author extend \yii\db\ActiveRecord { ··· } 查询一个id=1的作者的信息及其所写的所有书籍: $authorInfo = Author::find()->where(['id'=>1])->with('book')->one(); hasOne 是1对1,hasMany 是 1对多,写法基本一致;
24天前 喜欢(2) 浏览(144) 评论(0)
Wiki
在views/layouts/main.php 中添加下面的代码: //views/layouts/main.php $this->registerMetaTag(['name' => 'keywords', 'content' => 'yii, yii2, Yii中文网, yii教程, yii实战教程']); !isset($this->metaTags['description']) && $this->registerMetaTag(["name" => "description", "content" => 'Yii中文网,零基础学习yii2框架,提供丰富的yii2视频教程和应用实例,以及各种实用扩展推荐,我们旨在学术的互相学习探讨,共同进步!']); 解释一下为什么在 description 加 !isset($this->metaTags['description']),因为不同的页面可能需要设置不同的 description 信息。此处如此设置是在没有 description 的设置页面,默认使用上述的 description 的内容。 举个例子: 我想在文章详情页的描述是文章内容简介,我们就可以在具体的文章详情页添加如下代码: //views/topic/detail.php $this->registerMetaTag(["name" => "description", "content" => '某某文章的简介内容']);
24天前 喜欢(0) 浏览(112) 评论(0)
Wiki
如下图所示,在 Yii2.0 的框架中如何实现顶部下拉导航呢? 实现过程中主要用到 NavBar 与 Nav 两个 Html 组件: 在 NavBar 组件 [[begin()]] 和 [[end()]] 调用之间包含的任何内容都被认为是 NavBar 的内容。可以使用诸如 [[NaV]] 或 [[\yii\widgets\Menu]] 这样的小部件来构建这样的内容。 举个例子: use yii\bootstrap\NavBar; use yii\bootstrap\Nav; NavBar::begin([ 'brandLabel' => 'Yii 中文网', 'brandUrl' => Yii::$app->homeUrl, 'options' => [ 'class' => 'navbar-top navbar-fixed-top', //对应的样式 ], ]); echo Nav::widget([ 'items' => [ ['label' => '社区', 'url' => ['/topic/index']], ['label' => '分类', 'options'=>['class'=>'ycn-banner'], 'items'=>[ ['label' => '<i class="fa fa-wikipedia-w top-tag"></i> Wiki', 'url' => ['topic/wiki'],'encode' => false], ['label' => '<i class="fa fa-question-circle top-tag"></i> 问答', 'url' => ['topic/question'],'encode' => false], ['label' => '<i class="fa fa-book top-tag"></i> 博客', 'url' => ['topic/blog'],'encode' => false], ] ], ], 'options' => ['class' => 'navbar-nav'], ]); NavBar::end(); Tip:想要 label 中的内容支持 Html(例如:图标) 就需要添加配置 encode=>false
26天前 喜欢(0) 浏览(129) 评论(0)
Wiki
先贴一下 Gridview 列表尾部按钮的代码: [ 'header'=>'操作', 'headerOptions' => ['width' => '8%'], 'class' => 'yii\grid\ActionColumn', 'template' => '{update} {delete}', 'buttons'=>[ 'update' => function ($url, $model, $key){ return Html::a('编辑', '#', ['class' => 'j-edit', 'data-toggle' => 'modal', 'data-target' => '#page-modal']); }, 'delete'=> function ($url, $model, $key){ return Html::a('删除', ['delete', 'id'=>$model->id],[ 'data-method'=>'post', 'data-confirm' => '确定删除该项?', ] ) ; } ], ], 添加一个自定义的按钮 [ 'header'=>'操作', 'headerOptions' => ['width' => '8%'], 'class' => 'yii\grid\ActionColumn', 'template' => '{update} {delete} {test}', //此处添加一个 {test} 'buttons'=>[ 'update' => function ($url, $model, $key){ return Html::a('编辑', '#', ['class' => 'j-edit', 'data-toggle' => 'modal', 'data-target' => '#page-modal']); }, 'delete'=> function ($url, $model, $key){ return Html::a('删除', ['delete', 'id'=>$model->id],[ 'data-method'=>'post', 'data-confirm' => '确定删除该项?', ] ) ; } //这里对应添加一个test 'test'=> function ($url, $model, $key){ return Html::a('测试', ['delete', 'id'=>$model->id]) ; } ], ],
1月前 喜欢(1) 浏览(158) 评论(0)
Wiki
适用场景:在完成某些操作后,需要在页面进行相应的提示,比如文章保存成功,消息发送失败等 在控制器里面这样写,可以根据实际情况选择相应的类型: 错误消息: \Yii::$app->getSession()->setFlash('error', 'This is the message'); 成功消息: \Yii::$app->getSession()->setFlash('success', 'This is the message'); 提示消息: \Yii::$app->getSession()->setFlash('info', 'This is the message'); 多条消息: \Yii::$app->getSession()->setFlash('error', ['Error 1', 'Error 2']); 演示:
1月前 喜欢(0) 浏览(185) 评论(0)
Wiki
我们经常会比如博客文章,上一篇/下一篇 这样类似的需求,那么 Yii2 如何实现这样的需求呢? 以获取下一篇记录为例: public function actionView($id) { //下一篇内容获取 $res = Article::find()->where(['>', 'id', $id])->one(); if($res){ $next['url'] = yii\helpers\Url::to(['post/view','id'=>$res->id]); $next['title'] = $res->title; }else{ $next['url'] = '#'; $next['title'] = '没有文章了'; } return $this->render('view', [ 'model' => $this->findModel($id), 'next' => $next ]); } 在对应的页面,渲染获取下一篇的数据。 <div> 下一篇:<a href="<?=$next['url']?>"><?=$next['title']?></a> </div>
1月前 喜欢(0) 浏览(142) 评论(0)
Wiki
下面是快速打印 SQL 的方法: $query = new Books::find()->where('author=2'); echo $query->createCommand()->sql; 或者用下面的方式也可以: $query->createCommand()->getRawSql()
1月前 喜欢(0) 浏览(136) 评论(0)
Wiki
Gridview 如何对关联模型的数据做显示、排序、过滤? 您会发现对显示相关模型数据的GridView列进行排序和筛选实现起来很棘手。 正如您所知道的,如果最近一直在使用Yii2,那么有一种新的搜索数据的建议方法,即使用从主要实体模型扩展的对象,并将可搜索属性标记为“.”。那么,我们如何在GridView小部件上排序和过滤相关数据呢? 让我们想象一下下面的关系:一个叫做 “tour” 的模型: /** * @return \yii\db\ActiveQuery */ public function getCountry() { return $this->hasOne(Country::className(), ['id' => 'country_id']); } /** * @return \yii\db\ActiveQuery */ public function getCity() { return $this->hasOne(City::className(), ['id' => 'city_id']); } 我们希望在GridView上显示国家的名称和城市的名称。为了做到这一点,我们对 “tourSearch” 做了以下调整: class TourSearch extends Tour // extends from Tour see? { // add the public attributes that will be used to store the data to be search public $city; public $country; // now set the rules to make those attributes safe public function rules() { return [ // ... more stuff here [['city', 'country'], 'safe'], // ... more stuff here ]; } // ... model continues here 然后,我们配置一下 gredview,以便显示相关数据: // ... more grid configuration here 'columns' => [ // ... more columns configuration here [ 'attribute' => 'city', 'value' => 'city.name' ], [ 'attribute' => 'country', 'value' => 'country.name' ], 如上所述,我们将能够显示数据,但如何排序或筛选?让我们举例说明,这一次让我们关注 “TearSearch” 类的 “search” 方法: public function search($params) { // create ActiveQuery $query = Tour::find(); // Important: lets join the query with our previously mentioned relations // I do not make any other configuration like aliases or whatever, feel free // to investigate that your self $query->joinWith(['city', 'country']); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); // Important: here is how we set up the sorting // The key is the attribute name on our "TourSearch" instance $dataProvider->sort->attributes['city'] = [ // The tables are the ones our relation are configured to // in my case they are prefixed with "tbl_" 'asc' => ['tbl_city.name' => SORT_ASC], 'desc' => ['tbl_city.name' => SORT_DESC], ]; // Lets do the same with country now $dataProvider->sort->attributes['country'] = [ 'asc' => ['tbl_country.name' => SORT_ASC], 'desc' => ['tbl_country.name' => SORT_DESC], ]; // No search? Then return data Provider if (!($this->load($params) && $this->validate())) { return $dataProvider; } // We have to do some search... Lets do some magic $query->andFilterWhere([ //... other searched attributes here ]) // Here we search the attributes of our relations using our previously configured // ones in "TourSearch" ->andFilterWhere(['like', 'tbl_city.name', $this->city]) ->andFilterWhere(['like', 'tbl_country.name', $this->country]); return $dataProvider; } 就是这样了,希望本教程能帮助你找到方向。
1月前 喜欢(0) 浏览(139) 评论(0)
Wiki
一般数据表结构中经常会定义 created_at 和 updated_at 两个时间字段来记录表的创建及更新时间,那么 Yii2.0 如何通过模型来自动更新时间呢? 只需要在模型中添加以下方法即可: use yii\behaviors\TimestampBehavior; use yii\db\ActiveRecord; public function behaviors() { return [ [ 'class' => TimestampBehavior::className(), 'attributes' => [ # 创建时更新 ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], # 修改时更新 ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'] ], #设置默认值 'value' => date("Y-m-d H:i:s") ] ]; }
2月前 喜欢(1) 浏览(202) 评论(0)
社区公告
[公告] Yii中文网为优化用户体验进行大版本升级,老版网站会维持一段时间,可以点击顶部"旧版"链接访问旧版网站。
沟通交流

:492175201(技术1群)

:183620600(技术2群)

:291010569(技术3群)