看到yii整合后bootstrap,与原始的bootstrap语法不一样了,感觉变的更复杂了,这样有什么好处呢?有没有详细的教程
你用yii自带的bootstrap一样可以用原始的。
我觉得随便了!
看到yii整合后bootstrap,与原始的bootstrap语法不一样了,感觉变的更复杂了,这样有什么好处呢?有没有详细的教程
你用yii自带的bootstrap一样可以用原始的。
我觉得随便了!
大家好。
我在做翻译文档的时候有点疑问,还请大家帮助,谢谢。
官方手册中有这么一句
Instead of configuring fileMap you can rely on convention which is BasePath/messages/LanguageID/CategoryName.php.
依靠BasePath/messages/LanguageID/CategoryName.php 这样约定好的翻译文件格式可省略配置 fileMap
我使用的是yii2.0.3 高级程序模板
common目录下,有目录messages/zh-CN/common.php
其中有数组 'id' => '编号'
程序中我使用
<?= yii::t('common', 'id') ?>
但是不输出汉字内容内容。如下是我common/config.php中关于国际化的配置内容
'i18n' => [
'translations' => [
'*' => [
'class' => 'yii\i18n\PhpMessageSource',
],
],
],
还请大家看看,为什么是不是我的目录结构或者文件名称 还是没有符合默认规则。 请问大家 如何解决?
要用哪个缓存组件,怎么使用,我看了下指南,但弄不了。
首先配置一下缓存,自己选择是用文件缓存还是数据库缓存等。
然后就可以通过 Yii::$app->cache->set()
和 Yii::$app->cache->get()
设置、获取缓存内容了。
下面是一个带缓存依赖的实例:
如何在activeform中一行显示多个field,自动生成的都是一行一个
<?= $form->field($model, 'kf_jiaoda')->textInput() ?>
<?= $form->field($model, 'kf_yanzhong')->textInput() ?>
<?= $form->field($model, 'kf_hongxian')->textInput() ?>
这个和activeform没有任何关系。。。和你的布局有关,这两行不过是生成input的html tag而已。因为yii是用的bootstrap作为前端,你可以看看bootstrap的布局就很容易解决(http://getbootstrap.com/css/#grid),建议系统的学习一下bootstrap。
ok,如何解决你的问题,以yii-basic中的contact.php的那个表单来说:
`
忘记说了,上面的修改让name和email在同一行了,其余代码没修改。
另外,其实contact.php中那个输入验证码本来就是同一行的,其也是一个道理,就是bootstrap的布局的结果。
class CustomController extends ActiveController
{
public $modelClass = 'app\models\Custom';
// public $serializer = [
// 'class' => 'yii\rest\Serializer',
// 'collectionEnvelope' => 'items',
// ];
public function behaviors()
{
return ArrayHelper::merge(parent::behaviors(), [
'authenticator' => [
'class' => QueryParamAuth::className(),
],
'rateLimiter' => [
'class' => RateLimiter::className(),
'enableRateLimitHeaders' => false,
],
]);
}
}
源代码中,控制器的behaviors是在哪里处理的?
比如说:QueryParamAuth对象是在哪里实例化的?并且调用了authenticator()方法。
你给的例子,其实不能完全说明 behaviors
的行为,这里是 filter
的行为,但 filter
在 yii2
和 yii
中的实现不一样,yii2
中的 filter
是特殊的 behavior
,被框架多加了一层的处理,这里我只说明下 filter
的调用, 普通的 behavior
我暂时还没有用到,不清楚
一句话,QueryParamAuth
中 authenticator()
方法,是在 Controller
调用 beforeAction
时触发的,你可以在 Controller
复写 beforeAction
方法为空操作,看看还会不会调用。
在底层的 Controller
中,beforeAction
执行了 $this->trigger(self::EVENT_BEFORE_ACTION, $event)
触发了 EVENT_BEFORE_ACTION
事件,在 yii\base\Component
中 trigger
会首先 ensureBehaviors()
,把 behaviors()
定义的行为附加到 Controller
上
}QueryParamAuth
最终继承自 ActionFilter
的,来看看 ActionFilter
在 attach
时会做什么
会在 Controller
上绑定一个 EVENT_BEFORE_ACTION
事件,行为是执行自己的 beforeFilter
方法
到这里,你看到了,ActionFilter
最终会执行自己的 beforeAction
方法,当然这可不是 Controller
中的 beforeAction
方法,还会处理些前置check,如 except
和 only
检测,这个 beforeAction
正是你写 filter 时需要复写的一个方法,至于 QueryParamAuth
的 authenticator()
方法,自己可以接着走代码
入口是 Controller
的 beforeAction
方法,可以自己走一遍源代码,就这些
如题。
请问2.0.2高级程序模板建立的应用。 为什么前台登录后,后台不会同步登录信息? 或者后台登陆前台也不会同步登录信息。
我自己将应用改名了
backend => admin
frontend => www
并且新建了manage的应用
现在登录了 其中任何一个应用 其他2个应用不能像官方的初始化程序一样, 同步登录信息, 不知道是哪里的问题。 还请各位朋友帮助下,谢谢。
我安装了 advanced
模板,测试了下
在 common
下 配置www.t1.com
, admin.t1.com
可以实现一同登录,一同注销,你按照我的这个配置下看看,其他的配置就不需要了,这个主要是为了让 PHPSESSIONID
,和 _identity
生成的 cookie
都在域 .t1.com
下,并且共用 session
估计你没有针对两个应用使用不同的 session name
,都是默认的 PHPSESSID
,这样是会被相互覆盖的,需要设置不同的 session name
, session_name。yii\web\Session
有 public function setName($value)
方法, 所以你可以在配置文件里面配置不同的 session name
, 代码上不用改动,推荐这样子,试下看看。
是配置文件是怎么写的?
确认是不是 backend,frontend 用的 phpsession id 是否相同
不能在 common 下配置,要在 frontend 和 backend 下分别配置,并且配置成不同的 name
配置在 components 组件内的,移动到上层,肯定是错的
你在 common/config 里面配置的 session 已经生效了
这里两个应用的 PHPSESSIONID
都已经变成了 MySSID
了,但是因为在 common
下面,所有 www
和 admin
公用了 session name
,所以要单独配置在 www
和 admin
下,配置成不同的名字,然后在检查下生成的 cookie name
有没有变化,如果有不同,但是还是无法共同登录的话,有可能就是其他原因造成的了
还有,测试的时候多刷新几次,先把其他的 cookie
清理掉,在单独测试
admin.xxx.com
www.xxx.comwww
的站点下 cookie
没有 _identity
这个 key
,是没有登录么?admin
和 www
都登录的情况下,_identity
应该是有两个的,admin
下有一个www
下有一个
你都登录下,把 _identity
的 cookie
信息都拿出来看下
靠,你说的是前后台同步登录呀
理解错了,以为你说的是 前台登录了,后台就掉线了,后台登录了,前台就掉线了
,以为你相同的 session
被覆盖了
在 common 配置下 components 里面,配置下 user
用这个把 identity cookie 的信息配置下,生成的 cookie 信息应该是
测试下看 ok 不,我这边没有 advance 模板,我弄个看看
我也遇到的,我的解决办法是:
分别使用localhost:8080访问,和127.0.0.1:8081访问,这样两者的根域不同,则USER登陆后的COOKIE有效域也不同,就不会出现另一个用户掉线的问题了。
如题,给字段title自定义一个验证方法确保标题唯一,规则为'title','ckunique','params'=>'title']
,自定义方法如下:
public function ckunique($attribute,$params) {
if(News::ckunique($params,$this->$attribute)){
$this->addError($attribute,'内容不唯一');
}
}
这个当然ok,但是我想把规则里面的参数自定义,如 [‘title’,’ckunique’,’key’=>’title’],那么自定义方法怎么处理 params?
public function ckunique($attribute,$params) {
if(News::ckunique($params,$this->$attribute)) {
$this->addError($attribute,'内容不唯一');
}
}
params是你加的参数啊,例如你可以通过传入不同的参数,去获取不同的判断
如果$params[‘index’],中index是变量,怎么弄呢,比如他是一个店铺的id,id是不固定的,该怎么写呢?
求来一个通俗易懂的讲解,教程看不懂啊
gii gii gii gii gii gii gii gii gii gii
怎么不显示gridview中的 # 这一列?
如题
是否有[‘class’ => ‘yii\grid\SerialColumn’], 去掉试试
用widget生成表单,我看到视频里面生成的表单是action到view的,但是为什么在控制器能够接收到数据呢?render渲染视图实质上就是将views的代码调用到controller里面吗?
表单的显示和提交是两个过程:
1) 显示表单,get方法调用controller的action,render函数调用view返回要渲染数据,传给layout返回给浏览器。
2) 表单提交,post方法调用controller的action,通常不调用render,而是判断是有POST数据执行save分支然后redirect(重定向触发另一个get请求)。
或者简单说:有表单的controller/action被请求时,最多会执行两次。这两次都是独立进行的,因为浏览器和web服务器的连接一般是‘短连接’。