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