又LAG隨性筆記
  • 關於我
  • 作品集
  • 生活隨筆
  • 與我聯絡
  • 隨手扎

隨手扎

October 15, 2019

30天成爲Laravel萌新(第28天) - 上傳檔案

Laravel要上傳檔案非常的簡單,今天就來簡單帶個範例吧!

建立檔案目錄連結

首先,現用Artisan建立目錄連結。

artisan storage:link

上面命令會建立storage/app/public目錄,並將目錄同樣綁定到public/storage。這讓於此目錄下的內容,可以透過http://localhost/storage/<FILE NAME>存取。在public目錄下的檔案,基本都可以直接透過瀏覽器存取。

上傳頁面

同樣以一個簡單的上傳頁面作為範例。先建立resources/views/images/upload.blade.php:

@extends("base",['title'=>'上傳圖片'])

@section('title', '上傳圖片')

@section('body')
    <form action="{{route('image.upload')}}" method="post" enctype="multipart/form-data">
        @csrf

       <!--
       @if ($errors->any())
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
        -->

        <input name="file" type="file" accept="image/*" value=""/>
        <input name="" type="submit" value="上傳"/>
    </form>
@endsection
October 14, 2019

30天成爲Laravel萌新(第27天) - 本地化、多語言支援(Localization)

@extends("base",['title'=>'哎呀,找不著頁面'])

@section('title', '哎呀,找不著頁面')

@section('body')
    <h1>{{__('404 error message')}}</h1>
    <b>哎呀,找不著頁面</b>
    <p>
        <ul>
            <li><a href="/">點擊我,回到首頁</a></li>
            <li><a href="{{route('blog/post.index')}}">我的網誌</a></li>
        </ul>
    </p>
@endsection

開始

在昨天簡單建立的錯誤頁面中,又再一次偷渡了一個東西。對,就是那個有點怪怪的{{__('404 error message')}},實際上這等價於@lang('404 error message')。透過lang()函式的方式,也可以在控制器做變換。lang()會根據給定的字串,以及設定(app/config.php)中的locale和faker_locale轉換為對應的語言。預設會轉換為locale所設定的,而備用語言可由faker_locale設定。當兩者都不存在時,會直接輸出字串。還記得我們把app/config.php部份內容改成這樣嗎?

    'locale' => 'zh-TW',
    'fallback_locale' => 'en',

不過,不管是locale還是faker_locale,都還找不著{{__('404 error message')}}要轉換成的文字,所以現在會直接生成404 error message。

October 13, 2019

30天成爲Laravel萌新(第26天) - 客製化404錯誤頁面

HTTP協議上存在許多狀態碼,其中400系列、500系列錯誤可能是最常見到。200、300很難被注意到。恐怕又以404錯誤、403錯誤、500錯誤、503錯誤最常見。一個好的錯誤提示頁面,可以帶來很好的使用體驗。你可以看看別人怎麼設計(以及2018年不可錯過的創意404報錯設計),甚至更有404 PAGE TEMPLATE (https://www.404pagefree.com/) 可以直接下載404錯誤頁面模板(這網址真有趣),裡頭模板多以CC-BY 3.0姓名標示授權,可用於商業用途。

404 Page image


那麼在Laravel要怎麼客製化這些錯誤提示頁面?以404錯誤頁面為例,可以建立resources/views/errors/404.blade.php檔案,寫入以下內容:

@extends("base",['title'=>'哎呀,找不著頁面'])

@section('title', '哎呀,找不著頁面')

@section('body')
    <h1>{{__('404 error message')}}</h1>
    <b>哎呀,找不著頁面</b>
    <p>
        <ul>
            <li><a href="/">點擊我,回到首頁</a></li>
            <li><a href="{{route('blog/post.index')}}">我的網誌</a></li>
        </ul>
    </p>
@endsection

同樣的…CSS不是本系列重點……

October 12, 2019

30天成爲Laravel萌新(第25天) - 紀錄檔

使用Logging

現在,要再回到laradock來。不過同樣的,Lavavel儲存紀錄檔的地方也是在storage/logs。這裡會儲存使用Log::info()所寫下的紀錄。

docker-compose exec workspace bash -c "tail -f storage/logs/最新的log"

如果使用Linux的話,也可以直接:

tail -f storage/logs/最新的log

當然你也可以直接把紀錄檔,用文字編輯器開啟。不過上述會這麼做,是因為如次可以更簡單的在開發時除錯。有時候,Laravel錯誤訊息頁面提供的訊息並非一目瞭然,會需要用到printf方式除錯(我假設…你不動gdb,但用過最基本的除錯手法…)。在這裡,使用一系列Log::的方法,其中,Log::debug()就對應除錯資訊。這和我曾經寫過的瀏覽器console.log()外的一些其他用法 有些像。

October 11, 2019

30天成爲Laravel萌新(第24天) - 頁面清單 下篇(使用Pagnation和刪除按鈕)

就先來看看使用Laravel提供Pagination能夠多麼簡單。

首先,控制器只需要使用BlogPost::paginate($limit)查詢就好,並將查詢結果直接傳遞給視圖。

    public function index()
    {
        // 如果想要將每頁顯示數量變成可以調整的,
        // index需要傳入 (Request $request),並由下方方式取得$limit傳入paginate
        // $limit = $request->query('limit', 30);
        $posts = BlogPost::paginate(30);

        return view("blog/index",[
            "posts"=>$posts,
        ]);
    }

BlogPost::paginate($limit)會自動根據Request的page參數取得存取的頁面,自動計算offset,並根據給予的每頁顯示數量限制來查詢。甚至連index()都不需要傳入Request $request。傳給視圖的也少了不少。說到視圖,立馬來看看變得多簡潔:

@section('body')
    <div class="container">
        <ul>
        @foreach ($posts as $post)
            <li>
                <a href="{{route('blog/post.show',['id'=>$post->id])}}">{{ $post->title }}</a>
            </li>
        @endforeach
        </ul>
    </div>

    {{ $posts->links() }}
@endsection

列出文章清單的部份,大致什麼太大變化。但是頁面頁數選項不再那麼複雜,沒錯,只需要$post->links()就好。他會自動生成符合Bootstrap的Pagination。在瀏覽器接受到的HTML樣子可能如下:

呵呵,根本不需要寫這麼麻煩…也太簡單了吧!

October 10, 2019

30天成爲Laravel萌新(第23天) - 頁面清單 上篇

因為重點不在於CSS,不在於Bootstrap。 其實大可以將頁面弄的很美觀。在Laravel專案資料夾中,其實有一個給npm使用的package.json檔案。 不過還是來把重點放在Laravel上。

使用Pagnation前

Laravel提供一個超級簡單的方式,來處理分頁問題。不過在使用前,來看看原本要怎麼實現index()。不但要取得頁數,並計算檢索數量,然後從資料庫透過offset()、linit()的方式取得資料。

    public function index(Request $request)
    {
        $offset = $request->query("offset", 0);
        $limit = $request->query("limit", 30);
        $page = $request->query("page");

        if($page){
            $offset = ($page - 1) * $limit;
        }else{
            $page = ($offset / $limit) + 1;
        }

        $request->merge([
            "offset" => $offset,
            "page" => $page,
        ]);

        $posts = BlogPost::orderBy('activity_id','ASC')
                    ->offset($offset)
                    ->limit($limit)
                    ->get();
        return view("blog/index",[
            "posts"=>$posts,
            "page"=>$page,
            "total_pages" => $total_pages,
        ]);
    }
  • ««
  • «
  • 1
  • 2
  • 3
  •  … 
  • 21
  • 22
  • 23
  •  … 
  • 28
  • »
  • »»
© 又LAG隨性筆記 2022