<div class="truth">
不要怕bug,因为bug怕你
</div>
<blockquote class="default">
<p>知识点<br>
<p>
1.tp5 session常见误区<br />
</p>
<div class="env">版本:thinkphp5.07</div>
</blockquote>
<div class="note">
案例:用户登录过程中,我要将登录错误信息返回给登录页面,采用了二维的session来传值。
</div>
<div class="step">1.模板不支持数组,甚至是session数组</div>
~~~
Session::set('message_info.title','登录失败');
Session::set('message_info.content','验证码错误');
~~~
<div class="info">
我在模板中使用:
</div>
~~~
{if condition="$Request.session.message_info neq false"}
{/if}
~~~
<div class="info">
来判断提示信息是否存在,结果报错【variable type error:array】意思是说,模板中不能支持数组输出?好吧,如果用
</div>
~~~
{if condition="$Request.session.message_info.title neq false"}
{/if}
~~~
<div class="info">
来判断不出错了,也达到了自己的要求,但是有时候我们不知道设置title是必须的还是content是必须的,所以这样是不合适的,于是,调用session助手函数,来判断去解决这个问题
</div>
~~~
{if condition="session('?message_info') neq false"}
{/if}
~~~
这样,这个问题才算解决了。
<div class="step">2.session不能用正常的数组思维去思考!</div>
~~~
session('message_info','tese');
Session::set('message_info.title','登录失败');
Session::set('message_info.content','验证码错误');
~~~
<div class="info">
按照数组的思维去运行:
</div>
~~~
print_r(session('message_info'))
~~~
<div class="info">
应该输出:tese 但是在tp5的session中会报错
</div>
~~~
【Illegal string offset 'title'】
~~~
<div class="info">
意思是说,message_info.title这个是非法了。好吧这个是为了代码的严谨性,这样设计也没什么问题!不过,我还是要设置下:
</div>
~~~
session('message_info',null);
Session::set('message_info.title','登录失败');
Session::set('message_info.content','验证码错误');
~~~
避免报莫名的错误!
---
<div class="note">
不过,总觉得tp5有些设计欠缺人性化,以前学tp3一周时间算是入门了。我基于会tp3,去学tp5,到现在还在云里雾里!
</div>