2019年1月4日 星期五

npm 無法更新或更新,套件尚未建立或是被移出Incoming了

好早好早已前就安裝了nodejs以及npm,但也從來沒用過。最近因為開發網頁想要測試使用DropZone套件,因此有了需求。但是我的版本太舊了以至於無法使用。


參考了DigitalOcean:How To Install Node.js on Ubuntu 16.04 的正規安裝法,一直會出現上面的錯誤訊息,索性將npm移除,
sudo apt-get install npm
情況更嚴重了,npm指令不見了,也無法利用apt-get正常安裝了。

好不容易找到一篇Install the Latest Node.js and NPM Packages on Ubuntu 16.04 / 18.04 LTS,才發現版本的更新速度這麼快,當初我的Node.js才v6.16,現在已經進步到v10 的版號了,而且進步到只要將Node.js的PPA寫到sources.list,接著只要下指令安裝Node.js就會連同npm以及一些相依性的套件一併安裝。(我原先的npm以及Node.js都太舊了,難怪出現一大堆相依性問題)

如果你還沒安裝curl,就先輸入下面指令
sudo apt install curl

目前最新版本是第10版,你可以輸入
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -

如果你想使用的事長期維護版,你可以輸入
curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -

最後輸入下面指令,就可以同時安裝Node.js以及npm
sudo apt install nodejs 檢查安裝後的版本 nodejs -v
npm -v


你也可以察看/etc/apt/sources.list.d/,就可以看到新增的nodesource.list、nodesource.list.save兩個檔案,這兩個檔案會協助你利用apt-get 指令安裝或更新

參考網頁:

2019年1月3日 星期四


Mailtrap.io這個網站真有趣
他是一個假的Smtp Server
只要用Gmail信箱註冊
就可以申請一個假的信箱
那這樣的網站可以怎麼用呢?

假使當你設計一個網站,而且有用到Email寄信功能時
可能因為還在開發中、或者本身電腦尚未安裝sendmail寄信功能
就可以利用到這樣的Fake SMTP Server幫你寄、收信件



Laravel中的.env預設的Mail主機就是MailTrap
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=16xxxxxxxxxxxxx
MAIL_PASSWORD=05xxxxxxxxxxxxx

舉例來說:
假如啟用了Laravel 5.7的EmailVerify功能
使用者註冊後還需要收Email確認
也就是說主機會寄信給使用者
使用者收信點選連結後帳戶才會啟用
這時候MailTrap就可以派上用場了
但由於我們在.env環境設定檔中輸入的是smtp.mailtrap.io
所以儘管大家keyin的Email的信箱多天馬行空
通通都會送到Mailtrap收件匣中



參考網站:

2018年12月25日 星期二

Laravel的一些小技巧 - DB::table(一)

//利用兩層foreach,將資料寫入
//
$names = array('a','b','c');$ages = array('1','2','3');
foreach($names as $name)
{
    foreach($ages as $age)
    {
        DB::table('users')->insert(
            array('name' => $name, 'age' => $age)
        );    }
}

來源:stackoverflow - How to insert multiple record in laravel


https://stackoverflow.com/questions/29723865/how-to-insert-multiple-rows-from-a-single-query-using-eloquent-fluent

https://stackoverflow.com/questions/40106855/how-to-insert-multiple-rows-in-laravel-5?rq=1

https://stackoverflow.com/questions/39113682/insert-multiple-records-at-once-with-laravel/39389935

https://stackoverflow.com/questions/1307618/multiple-mysql-insert-statements-in-one-query-php

2018年12月23日 星期日

建立HTML表格,並且讓TR變成Form表單

一般傳統設計
我們可能會在FORM表單下包著TABLE,這樣當所有的element要被送出時,我們都會透過submit按鈕將資料全部送出,但假使我們的資料有分區塊呢?

把FORM包在TABLE底下,好像可以區分出好幾列,也可以個別送出表單資料且一如往昔,但是這樣的設計就w3c的規範是不正規的、無效的(DOM沒有這樣規定)。所以當使用javascript要取用DOM元素時,是有問題的,試想FORM的子元素或是TR的子元素,絕對不會是FORM或是TD,這樣想起來就很怪,而且一定出錯。

<table>
    <tr>
        <form method="GET" action="whatever">
            <td><input type="text"/></td>
            <td><input type="text"/></td>
        </form>
    </tr>
    <tr>
        <form method="GET" action="whatever">
            <td><input type="text"/></td>
            <td><input type="text"/></td>
        </form>
    </tr>
</table>

因此現在很多的網頁設計都改用DIV的方式來設計並把表單包進來。

最近看到一個有趣的設計,可以利用CSS的方式,融合表單以及TABLE的樣式,做出一個像TABLE一樣的表格,而且又可以分區塊送出FORM需要的動作ACTION。主要用的就是display:table、display:table-row、display:table-cell

<style>
    DIV.table    {
        display:table;    }
    FORM.tr, DIV.tr    {
        display:table-row;    }
    SPAN.td    {
        display:table-cell;    }
</style>
...<br />
<div class="table">
    <form action="blah.html" class="tr" method="post">
        <span class="td"><input type="text" /></span>
        <span class="td"><input type="text" /></span>
    </form>
    <div class="tr">
        <span class="td">(cell data)</span>
        <span class="td">(cell data)</span>
    </div>
    ...</div> 

參考網頁:stackoverflow - Create a HTML table where each TR is a FORM

Laravel的一些技巧 - Eloquent(一)

//使用whereIn取得學校列表,函式先取(資料庫欄位的'id', 再取學校陣列)
//School物件是use App\School這個Model

$schools = School::whereIn('id', $select_school)->get();
//DB::table的寫法//$schools = DB::table('schools')->whereIn('id', $select_school)->get();

來源:stackoverflow-How to Make Laravel Eloquent “IN” Query?

2018年12月22日 星期六

Laravel的一些技巧 - Blade (一)

//foreach取學校,最後一間學校不會出現「、」號
//使用$loop變數
@foreach( $schools as $school)
    {{ $loop->first ? '' : '' }}
    {{ $school->school_name }}
@endforeach

來源:stackoverflow-How to remove comma from last array in Laravel 5?

2018年12月20日 星期四

$_ENV環境變數為空值

PHP中的$_ENV是伺服器中環境變數的數組,他是PHP中的超級全域變數,最近學習Laravel時有一.env的環境設定檔,其原理是其設定好的環境設定值,加載到PHP的$_ENV全域變數中。

基於好奇,在未啟動Laravel環境的狀態下,試著在PHP程式中把$_ENV倒出來,可使用的語法有三中
1. var_dump($_ENV);
2. print_r($_ENV);
3.
foreach ($ENV as $key =>$value){
echo $key . "==>" . $value . "<br>" 
}

結果發現倒出來的$_ENV全是空值

原來在php.ini中,有一 variables_order設定值,如果是設為GPCS,就不會顯示$_ENV環境變數。G指的是Get、P指的是Post、C指的是Cookie、S指的是Session,而ENV的代表英文為E,所以如果希望$_ENV能撈出伺服器上的環境變數,variables_order就應該設定為EGPCS

variables_order =  EGPCS

但是,看了一下,發現如果伺服器上的環境變數被撈光了,好像不太安全,所以其實php.ini的說明中也說了,發行版伺服器的php.ini設定建議還是採用GPCS。
ps.設定完後,要記得重起Apache2