2019年7月16日 星期二

如何排除 Laravel 問題:Cannot use object of type stdClass as array in Laravel



在使用DB查詢後取得查詢結果時出現這個錯誤Cannot use object of type stdClass as array ...
查了一下,發現在Laravel好像蠻多人都有遇到這個問題

$data = DB::table('users')->where('id',$id)->first();
if($data) {
    $user->isOpen=$datapen=$data['isOpen'];
 }

原以為他是Array,應該直接這樣取值即可,但就是會報錯
去查了一下原來要改用以下方式取值才不會報錯

$data = DB::table('users')->where('id',$id)->first();
if($data) {
    $user->isOpen=$datapen=$data->isOpen;
 }

不知為何原理,變成物件了? 但如果直接用dd  去看又說它是array
還是先記下來,以後有空再深入瞭解。

2019年7月3日 星期三

Laravel 如何登出系統?



記錄一下,在Laravel未登出前如果導向到登入頁
預設還是會登入的,所以要先手動登出系統才行

如果在Auth之中,則用以下指令即可
$this->guard()->logout();

如果是從Controller 或是其它地方,則可以直接使用Auth物件
if (Auth::check()) {

Auth::logout();

};

2019年6月25日 星期二

Docker 中如何重啟apache & OPcache reload

最近進行中的專案,有用到OPCache
很怪,OPCache 常常會無法照Cache檔顯示
狀況不明,在沒空查參數情況下,重啟就能正常更新 當然直接更新再說

在Docker中要重啟apache就能讓OPCache reload,所以我們可以執行以下指令來達到重啟 (以CentOS為例):


docker-compose exec your-image-name httpd -k graceful

graceful 也可以換成restart,我以前都是使用restart 但上網看了其它人的說明

我們如果要在不重新啟動 Apache 的情況下重新載入設定檔,就要用到 graceful 這個指令,它會傳送一個 SIGUSR1 的信號(signal)給 Apache 伺服器,讓 Apache 很優雅的(graceful)重新啟動。如果 Apache 本來就沒有在執行,那麼它會直接啟動(start)。

graceful 跟 restart 不太一樣,他不會像 restart 一樣直接中斷目前正在進行的連線,而是會等待所有的連線都結束之後,才會重新啟動、載入設定檔,並且重新開啟 log 紀錄檔。而 graceful 在重新啟動之前,也會使用 apache2ctl configtest 來測試設定檔是否正確。

看來graceful 是更加完善的重啟,所以之後多半就改用這個吧!!

2019年6月13日 星期四

Laravel 重新安裝套件


Laravel 重新安裝套件

最近在小試Laravel 一開始執行的還算順利
但不知為何,在下完清cache指令後就都無法正常執行了

php artisan cache:clear
php artisan config:clear
php artisan view:clear
只會出現Error 500

在為了不想花時間追這怪問題(其實也已經花了不少)
所以想說重新再來一次好了

但重新再來一次,發現無法正常運行 出現啟動不了問題
出現了 ...vendor/autoload.php  not Found
查了一下發現是Vendor並沒有在第一次啟用時下載載入

蠻怪的,該不會是先前的project 已載入,所以就不載入? 
看來之後要先去好好看一下Laravel的架構才行

排除方式,執行

composer update

讓他更新下載, 有點久因為算是第一次載入
完成後,第二次建立的專案,就可以正常運行了


2019年4月4日 星期四

PHP 強大的substr

用久了其它語言再來用PHP
就會覺得 PHP真是強大

程式可以寫的也愈來愈少行,當然愈來愈寫的看不懂 哈
今天來讚嘆一下substr ,最近在處理PHP時才發現原來PHP的substr

之前在寫JAVA,當遇到要從字串截右方算起3字時,程式要寫成這樣


String data=new String("123456abcdef");
data.subString(data.Length()-3,data.Length());

javascript 要用以下寫法:

var data="123456abcdef";
data=data.substr(data.length - 3);

不然也有slice() 可以使用

var data="123456abcdef";
data=data.slice(-3);

而PHP更利害了,可以直接像javascript slice()的寫法就可以了

$data="123456abcdef";
$data=substr($data,-3);

簡簡單單又少人家一些程式碼
真怕寫久了,其它語言回去會有障礙 哈 哈




2019年4月2日 星期二

如何在html input禁用輸入法?

目前用windows 10開發
不知為何 輸入法常常跑出來
造成打英數字常要重覆打一次
印象先前似乎沒這種問題

不知是作業系統變的太聰明了 還是我變的太笨了
不管如何,所以我就發現在網頁表單輸入欄位上
也常會發現這問題,所以找了一下如何在輸入欄位時不啟用輸入法
有發現一篇寫的很完整
可是現行在 chrome竟然不適用了
不知是否這個 css設定 是不是標準的css
看起來是標準 但就不知 chrome為何後來不納入

不過還是先記下來

在IE及FF 只要這樣做:
<input type="text" style="ime-mode:disabled" />

但如果在 chrome,可能就要用 javascript來進行處理

//\u4e00-\u9fa5為中文的編碼範圍
<input type="text" style="ime-mode:disabled"
onkeyup="this.value=this.value.replace(/[\u4e00-\u9fa5]/g,'')"/>

不過有人是建議可以採用HTML5的方式達到這個效果
<input type="tel">

以上就參考參考吧

參考連結:
https://www.lidaren.com/archives/1240

2019年2月26日 星期二

SQL Server stored procedure varchar 長度問題

 

在處理一個stored procedure 問題,看起來script沒啥問題,但追查後發現

原本是宣告varchar(8000) 的變數,但在SQL Server 執行stored procedure 時列印該變數時發現,長度還沒到8000就會被截掉了,這問題似乎沒人遇到過,頂多就是有人遇到 在組宣告為varchar(Max)字串變數時,發現長度會被截掉字串 ,要在組字串時都強制宣告為varchar(Max)  才能排除 (請參考 [SQL]VARCHAR(MAX)字串相加的問題)

不遺我不是用這個解法,而是將原本宣告varchar(8000)的變數改宣告為varchar(Max) 就正常了,非常怪異,不露至少是解決了此問題,在此紀錄下來方便查詢