Laravel 開發筆記

xingwangi發表於2019-11-06

檢視 vagrant 版本
vagrant -v

接下來看文件安裝homestead
https://learnku.com/docs/laravel/6.x/homestead

銷燬 hometead
vagrant destroy  或者 在虛擬機器裡面直接刪除

重灌 hometead
vagrant up

重新編譯配置檔案
vagrant reload --provision

composer create-project laravel/laravel weibo --prefer-dist "5.8.*"

升級laravel到指定版本 (更改數字部分)執行 composer update
"laravel/framework": "5.8.*",  "laravel/framework": "6.0.*",

檢視laravel 版本
php artisan -v

時區
'timezone' => 'UTC',
更改
'timezone' => 'Asia/Shanghai',

生成auth腳手架
php artisan make:auth

檢視路由列表
php artisan route:list

建立模型 -h 引數檢視幫助
 php artisan make:model Tag -h

檢視遷移狀態
php artisan migrate:status

資料遷移  
php artisan migrate

資料回滾
php artisan migrate:rollback

重置
php artisan migrate:refresh --seed

開發過程中更改資料結構的兩種方式
更新資料結構
php artisan make:migration add_users_id --table=projects

新增欄位
  $table->integer('user_id'); 
回滾
 $table->dropColumn('user_id');

生成資料表 
 php artisan make:migration create_projects_table 

 laravel裡檢視模板的擴充套件與區塊宣告

模板區塊
 <main class="py-4">
      @yield('content')
 </main>

繼承
@extends('layouts.app')
@section('content')
   內容
@endsection

區域性檢視  複用
_ create.blade.php

引入
 @include('projects._createModal')

解析符
{{ asset('js/app.js') }}
{{ mix('js/app.js') }}

php artisan preset -h

移走前端框架
php artisan preset none
移走前端框架php
php artisan preset bootstrap    php artisan preset vue

在artisan preset none以後再執行artisan preset bootstrap,就會導致bootstrap這個前端框架的js檔案沒有載入上,同時jQuery也沒有載入上,從而導致我們課程中的模態框只是有css樣式,但是點選並不會彈出模態框
(問題原因)

由於這個preset命令的bug,導致resources/js/bootstrap.js中下面這塊程式碼沒有被加上

try { window.Popper = require('popper.js').default; window.$ = window.jQuery = require('jquery'); require('bootstrap'); } catch (e) {} 可以看到這塊的作用就是嘗試載入bootstrap和jQuery相應的js檔案

(問題解決)

如果遇到了上述問題,就在你的resources/js/bootstrap.js中加入上面的這塊程式碼,然後再編譯即可

下載新版錯誤除錯工具
composer require facade/ignition
文件
部落格:使用 Ignition 替換 whoops 報錯提示

設定淘寶映象
npm config set registry "https://registry.npm.taobao.org"

yarn 安裝  windows
yarn install --no-bin-links
 
cross-env: not found 解決
刪除 cross-env  在 package.json

新版框架需要執行
yarn add vue-template-compiler --save-dev

編譯和安裝
.version()
npm run dev
npm run production`

https://laravelcollective.com/docs/5.6/htm...

安裝 
composer update

模板檢視

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#modelId">
    Launch
</button>
<!-- Modal -->
<div class="modal fade" id="modelId" tabindex="-1" role="dialog" aria-labelledby="modelTitleId" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">新建專案</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">×</span>
                </button>
            </div>
            {!! Form::open(['route'=>'projects']) !!}
            <div class="modal-body">
                <div class="form-group">
                    {!! Form::label('name', '專案名稱:',) !!}
                    {!! Form::text('name', '', ['class'=>'form-control']) !!}
                </div>
                <div class="form-group">
                    {!! Form::label('thumbnail', '專案圖片:',) !!}
                    {!! Form::file('thumbnail', ['class'=>'form-control-file']) !!}
                </div>
            </div>
            <div class="modal-footer">
                {!! Form::submit('儲存', ['class'=>'btn btn-primary']) !!}
            </div>
            {!! Form::close() !!}
        </div>
    </div>
</div>

許可權驗證
 $this->middleware('auth');

php artisan storage:link   //  在linux 環境下生成軟連線 ll public

安裝圖片管理元件
composer require intervention/image
文件  api
http://image.intervention.io/getting_start...

    //存取圖片
    public function thumb($request)
    {
        if ($request->hasFile('thumbnail')) { //是否有上傳檔案
            $thumb = $request->thumbnail;
            $name = $thumb->hashName();
            $thumb->storeAs('public/thumbs/original', $name);
            $path= storage_path('app/public/thumbs/cropped/'.$name);
            Image::make($thumb)->resize(200, 90)->save($path);//需要手動建立資料夾
            return $name;
        }
    }

引用
src="{{ asset('storage/thumbs/original/'.$project->thumbnail) }}"

定義user和project之間的關係 使用者有幾個專案

user.php
   public function projects(){
      return $this->hasMany(Project::class);
   }
projects.php
    public function user(){
        // 呼叫關係 $projec->user
        return $this->belongsTo(User::class);
    }

通過關係新增資料

    public function store(Request $request)
    {
       $request->user()->projects()->create([
           'name'=>$request->name,
           'thumbnail'=>$request->thumbnail
       ]);
    }

允許新增資料的欄位

 protected $fillable=[
         'name','thumbnail'
 ];

表單驗證
 php artisan make:request ProjectsRequest
 

 public function rules()
    {
        return [
            'name' => [
                'required',
                Rule::unique('projects')->where(function ($query) {
                    return  $query->where('user_id', request()->user()->id);
                })
            ],
            'thumbnail' => 'image|dimensions:min_width=260'
        ];
    }
​
    public function messages()
    {
        return [
            'name.required' => '專案名稱必填',
            'name.unique' => '專案名稱必須唯一',
            'thumbnail.image' => '圖片格式錯誤',
        ];
    }
@if($errors->any())
<ul class="alert alert-danger">
        @foreach($errors->all() as $error)
           <li>{{ $error }}</li>      
        @endforeach
</ul>
@endif

判斷一個集合是否為空

 @if(count($projects)>0)
 @if(!$projects->isEmpty())
 @each

  <div class="card-deck">
        @each('projects._card',$projects,'project')
    </div>

_card.blade.php

<div class="col-3 my-3">
    <a href="projects{{ $project->id }}" class="card">
        <img class="card-img-top" src="{{ asset('storage/thumbs/original/'.$project->thumbnail) }}" alt="">
        <div class="card-body">
            <h5 class="card-title text-center"> {{ $project->name }}</h5>
        </div>
    </a>
</div>
{!! Form::open(['route'=>['projects.destroy',$project->id],'method'=>'DELETE']) !!}
 <button type="submit" class='btn btn-default'>
      <i class="fa fa-btn fa-times"></i>
 </button>
{!! Form::close() !!}

相關文章