- Yii2 基础模板 basic/commands/HelloController.php 是干啥的 ?
- 应该怎么使用呢?
- 在view中使用还是在controller中使用?
求解
命令行工具 controller
有用,凑十个字啊回复
求解
命令行工具 controller
有用,凑十个字啊回复
用Gii直接生成的视图文件里:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'uid',
['label'=>'gender','value'=>$model->getGenderText()],
],
]) ?>
这里面输出的HTML怎么自定义或修改样式?
研究了一下Yii2.0源码,找到了答案,给大家分享如下:
DetailView可以自由定义样式
输出后的HTML为:
其它具体参数,可以参考【yii\widgets\DetailView】
不错,感谢分享~~~
内容呈网格状···咋弄··
毕业论文打算用YII做个网站,看到有人介绍这边书《应用Yii1.1和PHP5进行敏捷Web开发》发现淘宝居然没有,甚至其他书籍也没。。
yii1的书,http://www.yiibook.com/ 有下载。
yii2的书只有英文的。可以到http://it-ebooks.info/search/?q=yii&type=title 这里下载。
Baidu Tencent都有使用的.
Sina, jumei, xiaomi 也都有使用的。
Yii 中出现的“<?=” 是什么意思啊?比如下段代码
<?= Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]) ?>
这时php的标签,和<?php ?>一样的。用<?= ?> 就不用echo,否则你要输出的话,需要加上echo词汇输出。
这个就是用在模板里面方便点。
这个不是php语法么?是php的一种输出格式
楼上的回答太美妙了,赞一个
其实建议你用最标准的<?php ?>这样大家都能看懂,新手也不会有这个问题了
最好用标准格式
这样的方式是必须开PHP扩展才可以实现的,向下不一定会兼容
我的觉得yii2 对 <?= 进行了处理,并不像上面说的那样是php的语法,在输出widget时,将<?= 换成 <?php 试试?
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有效域也不同,就不会出现另一个用户掉线的问题了。
大家好,请问,我有个字段“start_at”是unixtime格式保存的时间。
我想在输出是现实为日期格式 Y-m-d
在view界面我知道用 start_at:datetime 可以格式化为日期
但是在ActiveForm中我使用了DatePicker控件时,应该怎么让他也格式化成日期形式呢?我的代码如下。
谢谢大家。
<?= $form->field($model, 'start_at')->widget(
DatePicker::className(), [
'inline' => FALSE,
'language' => 'zh-CN',
'clientOptions' => [
'autoclose' => true,
'format' => 'yyyy-mm-dd',
]
]); ?>
‘dateFormat’ => ‘php:Y-m-d’,
需要添加"yiisoft/yii2-jui": "*"
使用如下:
api参考:
http://www.yiiframework.com/doc-2.0/yii-jui-datepicker.html
用activequery怎么生存(and) OR ( AND )的sql?
我括号里面and两边的条件含有运算符。
问题如果都是=我会,就是不知道怎么加其他运算符。
比如:['or', ['type' => 11, test = 1], ['id' => 10, uid=5]
生成(type=11 and test=1) or (id=10 and uid=5)
我要生成(type=11 and test>=9) or (id=10 and uid=5)
;
怎么加运算符?
用andWhere()后缀在where()后面就ok了
我想在一个页面中使用ajax,但是jquery.js是在布局文件main.php的末尾引用的,导致ajax失效,其他jquery代码也是失效的。想到解决的办法有二。
第一:将jquery代码写到布局里面,显然不可取,因为这样会导致文件会有多于的jquery代码。
第二:将jquery.js由布局文件的末尾移到开头,但是问题来了,在布局文件main.php中我并没有看到引入jquery.js的源码,不知道在哪里
引入的,所以就没法移动。 求解?
解决办法,在配置文件web.php中的components里:
傻孩子,其实也可以定制一下jquery的,框架自带的jquery没有压缩的,比较大,可以把它在源码处改写,换成自己的jquery,这样能节省几十kb哦
由于像在A控制器中的__construct()
做一些简单的验证,
然后B控制器才是访问的控制器调用parent::__construct()
去做通用的验证,
但是会报错,报错如下
PHP Fatal Error – yii\base\ErrorException
Call to a member function getUniqueId() on a non-object
yii
框架需要自己创建 Controller
的实例,你任何时候都不需要覆盖人家的 构造函数
,如果你需要覆盖的话,也需要和它的 方法签名
一样,并且调用 parent::__construct
,99.999%
的情况下,你不需要这么做
你的问题是,在 controler
初始化的时候,做些验证,用 init()
方法就可以了