<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>