---
# System prepended metadata

title: Laravel
tags: [PID]

---

# Laravel
###### tags: `PID`


## blade.php
```
php : <?php echo $x ?>
blade.php :{{$x}}   //轉成html碼
           {{{$x}}} //不轉換
```  
## view


### 語法

view("name") ; name為該blade.php的名字



## 建立專案

在欲創新專案的底下開啟終端機輸入

:::success
laravel new  ProjectName;
:::


執行Laravel專案需要先利用php開啟一個簡易Web server指令如下
:::info
預設為port 8000 可在 serve 後加上 --port XXXX 更改port
php artisan serve
進入網址為DB_Host:port 
ex:http://127.0.0.1:8000/
:::
## 資料庫

### 資料庫連接
修改.env檔中的DB_PORT,DB_DATABASE,DB_PASSWORD,DB_USERNAME

:::info
在控制器php頁面需加入 use Illuminate\Support\Facades\DB;
:::
### 資料庫
新增 migration
:::info
php artisan make:migration create_users_table
:::
執行 migration
:::info
php artisan migrate
:::
生成登入註冊
:::info
php artisan make:auth
:::
在migration 使用 mysql語法
DB::unprepared('mysql 語法')
### 資料庫使用語法

DB::action('action......')
括號內做什麼action就放什麼



範例:
:::info
DB::select('select * from table');
DB:insert('insert into table (Column1,...) values (Column1,....)')
:::
## Controller

### 建立Controller

:::info
php artisan make:controller controller名稱
:::

### Controller版本問題
控制器回應get請求 laravel 6版以上遇到
:::danger
Illuminate\Contracts\Container\BindingResolutionException : Target class[] does not exist
:::

解決方法：
:::info
web.php 加入 use App\Http\Controllers\controller名稱;
Route::get('/', "controller名稱@index")
改成
Route::get('/', [controller名稱::class, 'index']
:::
## Model

### 建立Model

:::success
MODEL:php artisan make:model MODEL_NAME
:::

## with



## 註冊/加入會員/忘記密碼

php artsian make:auth;

:::success
自動生成資料表users
php artsian migrate 
:::


## Route

### 語法:

Route::HTTP動詞('路徑',參數) 依路徑對應至各php,若找不到則顯示404

:::info
Route::get('/',function{
return view ("filename")  
})
:::
:::warning
若在資料夾內 則filaname = foldername.filename
:::

[參考筆記](https://www.slideshare.net/shengyou/4-route)

---
## 狀況排除
### 中文unicode亂碼
```javascript=
    json_decode(json_encode($week,false));
```
### 在apache2 使用 laravel 的 .htaccss
啟動 apache2 rewrite mode:q
```
sudo a2enmod rewrite
sudo systemctl restart apache2
```
## 表單POST

需加入{{csrf_field()}}

需要使用Request 請求


---

## 驗證碼功能Captcha

```
composer require mews/captcha
```
:::info
設定/config/app.php


'providers' => [
    // 略...
    Mews\Captcha\CaptchaServiceProvider::class,
]

'aliases' => [
    // 略...
    'Captcha' => Mews\Captcha\Facades\Captcha::class,
]
:::

產生設定檔：config/captcha.php(更改樣式用)
:::success
php artisan vendor:publish
:::

修改/resource/views/auth/login.blade.php 挑位置加入：
```php
<div class="form-group">
<label for="captcha" class="col-md-4 control-label">驗證碼</label>                 
    <div class="form-group">
<div class="col-md-3">
<input id="captcha"  class="form-control" type="captcha" name="captcha" value="{{ old('captcha')  }}" required>
             @if ($errors->has('captcha'))
                <span class="help-block">
                    <strong>驗證碼輸入錯誤</strong>
                </span>
            @endif
        </div>
<span class="col-md-1 refereshrecapcha">  //換一張圖功能
        <a href="/login">{!! captcha_img('flat')  !!}</a>  #樣式 flat
</span>
    </div>
</div>
```
```php
修改/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

加入：

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required|string',
        'password' => 'required|string',
        'captcha' => 'required|captcha',  #新增此行
    ]);
}
```
對應路由web.php
:::info
Route::get('/login/refereshcapcha', 'Auth\LoginController@refereshcapcha');
:::

修改app/html.../loginController.php

加入：
:::info
public function refereshcapcha()
{
     return captcha_img('flat');
}
:::






## laravel安裝

安裝指定版本: composer create-project laravel/laravel=5.5.*
            composer create-project laravel/laravel 檔案名稱 "5.5.*"
[安裝](https://laravel.tw/docs/5.3/installation)