My Application 这个怎么修改的。求指点
白给分的题,在 app/config/main.php
中 'name'
My Application 这个怎么修改的。求指点
白给分的题,在 app/config/main.php
中 'name'
![T}AT}ZM[]8JW6VFYKM0CUR.png
这个目录也是有的为什么还会保这个错误
要在 openapi/common/config/bootstrap.php 文件中最后加上一句话
同意楼上的
如何在配置文件里设置一次 use yii\helpers\Url后,views视图的页面就不需要再次引入了?
不可以,没有这种操作!
每次都要引入 确实很烦
你难道就不会变通一下:搞个自己的View基类,把yii\helpers\Url作为属性,那你的所有views视图就可以直接用Url属性了啊,不用再引入了啊
更高级一点,应该可以使用依赖注入容器\Yii::$container,给View组件注入Url属性,这样连基类都不用了,全自动了,更符合你所要求的autoload全局加载。 不过这仅仅是一个思路,我自己没试过
还有个思路:给View组件附加一个Behavior行为,行为里面你把Url作为属性,应该也是可以的。也可以全自动全局加载
我不是很确定了,你可以在layout层引入试试看。
应该是可以的,twig模板就实现了这个功能
在main.php配置:
“
‘globals’ => [
“
然后模板里就直接可以使用html::xxxx了,而且是可以在任何模板里
RT,复制了frontend,命名为mobile,在mobile的config修改了一切frontend的配置为mobile,common/config里面也配置了应用的别名及路径,在模板调用的时候,模板正常,但是assets资源,却引用的是frontend下的assets资源,求教该怎么办
$model->setScenario(‘update’); or $model->scenario = ‘update’;
这两个有啥不同,setScenario scenario 哪个是要被淘汰了吗
Yii框架下的对象属性都可以get和set
条条大路通罗马。
$model->setScenario(‘update’); or $model->scenario = ‘update’;
解释一下:
首先要说一下PHP的set和get,也是yii把php的set,get运用的很好的地方。
$model 是一个对象。 -> 是指向这个对象的属性,这个如果不懂就不用往下看了。
$model->setScenario(‘update’) 这样是正常的写法,因为在对象$model下面肯定设置了一个函数叫 setScenario。(具体这个函数在哪你可以自己找,不过肯定是存在的。)
就好比我们创建一个类,里面写setXxx(),然后new一个对象调用这个setXxx();说到这里,以上的都很好理解了。
重点是这里,$model->scenario 其实也没什么,也是yii把php的set,get运用的很好的地方(第二遍说了)
当执行$model->scenario($model对象没有这个函数 ,正常来说肯定报错,但是PHP回去执行魔术函数set)而在Yii里重写了这个set,大概意思就是public function __set(){Yii重写了这里,如果找不到scenario,这个函数,那他就会在前面加一个set。这样 ‘set’.$xxxx} 最后拼出来的就是setScenario,上面说了,setScenario这个是可定有的。所以,$model->scenario 这样执行,其实内部就是在 $model->setScenario(‘update’) 这样执行。
我发现这个方法其实是$_SERVER["REMOTE_ADDR"]
封装的应该,
我通过CDN加速的,直接他就是获取的CDNIP了,而不是我的ip 我想改掉.
我用的是yii2 2.0.15 基础版
在 vendor\yiisoft\yii2\web\Request.php
自定的 Yii::$app->user->identity->get***()
方法在编辑器里找不到定义,这些方法是挂载在 登陆的 User model里了。
或者你可以使用user 的关联模型自定义方法。例如User模型里定义了hasOne关联Store表。那么可以在Store模型里自定义方法,然后调用方式这样:Yii::$app
是应用的实例,调用组件的。例如 Yii::$app->user
是当前应用调用user组件
user 是模型
identity 是定义的接口也就是user模型必须要实现的接口,因为在调用login时注入进入的必须是 IdentityInterface
,
最后返回的是关联的user对象(但是这个关联对象必须要实现接口)
store 是user的关联对象返回的是store对象
自定义方法()是store里面的一个函数,那可以可以store->自定义方法()调用了
讲解一下identity ,identity是身份的意思。是在登录的时候存储用户 。那它是怎么存储的呢?
Yii::$app->user的关联对象identityYii::$app
这个都知道了吧,就是Yii应用实例 Yii::$app->user
是当前应用调用user组件(前面已经说了)
那它怎么怎么知道去调用user组件?因为在main.conf配置的:
仔细看发现了identity 这个词。但是他的全称是identityClass 这里定义的是身份验证信息调用使用的类是\Common\Models\User,也就是你的User模型,但是这个User模型时有要求的,必须实现implements IdentityInterface接口。然后程序运行后,会自动注册user组件(注册的是vendor/yiisoft/yii2/web/User.php)而不是你config配置的user,Config配置的user只是用来获取关联对象,然后可以这样使用了Yii::$app->user->identity ,但是执行identity的时候实际没有这个方法,应该会报错的,Yii使用了PHP的机制会去尝试执行getIdentity()。
上面说了,user是 vendor/yiisoft/yii2/web/User.php的组件,那么user->identity肯定是在vendor/yiisoft/yii2/web/User.php下面找是不是有getIdentity()。如果没找到,我直播吃翔。。。
然后在看 $this->renewAuthStatus();这个就是给identity复制user对象数据。
注意这两行:
这个findIdentity方法其实是接口 IdentityInterface 的具体实现。 (你可以试试点击鼠标进入这个findIdentity方法)他会跳到IdentityInterface接口里。所以说Yii::$app->user->identity->你写的方法()
执行不了。因为你要在接口里定义.
因为 Yii::$app->user->identity
是实现 IdentityInterface
接口的。是使用IdentityInterface
接口的契约规定,public function login(IdentityInterface $identity, $duration = 0){}
传入的identity这个就是user查询结果对象,但是这个对象要符合依赖注入的规定。
而你的User model 里自定义了一个放,但是这个方法只是你model里的。登录后不会注册到这个方法,因为这个方法不符合login(IdentityInterface $identit)
这个规定,它接收的是一个接口,你的Model要实现这个接口,也就是说,你要在接口里定义好方法,然后在user模型里写方法的具体实现。这样才能使用 Yii::$app->user->identity->get***()
如题,求推荐较好的 Yii2 视频教程
最好全一点的,我要加深技术,先谢谢了
我是看这套教程学的,感觉还不错
http://www.sucaihuo.com/video/176.html
首推,魏曦教你学教程+慕课 开发仿京东商城,这两个学了之后至少就入门了。再推慕课 yii2进阶商城,yii2框架差不多东西就了解了
一起做项目,加强有没有兴趣,784248377 qq
每个人不太一样,需要看基础的视频可以看:https://www.imooc.com/learn/404
看我动态说说,找我私聊。
一个讲解很细致的Yii2 restful接口视频,值得一看https://edu.csdn.net/course/detail/26600
$sql=new \yii\db\Query();
return $sql->from('table')
->select('id')
->where($where)
->all();
$where= array('like', 'id', $arr[0]);
上面的语句是 id like '%$arr[0]%'
那我想要的是 '$arr[0]%'
或者 '%$arr[0]'
怎么写 ,谢谢,
试试这样$where= array('like', 'id', $arr[0].'%', false);
我现在做了一个前端接口,直接通过
$dataProvider = $searchModel->search($data);
$list = $dataProvider->getModels();
这样的方式获取的数据,但是直接返回前端的时候是包含表中所有字段的,有些还是敏感字段,有什么方法可以控制输出的字段吗?
不自己循环返回值。
$query->select(['id']);
如果这个设置 就是显示这个字段
fields方法控制输入字段