# PHP LARAVEL
**1. Chuẩn bị**
* Composer.
https://getcomposer.org/download/
* Môi trường PHP (xampp).
https://www.apachefriends.org/download.html
**2. Cài đặt**
* Tạo project:
`composer create-project laravel/laravel=8 laravel`
* Run server:
```
php artisan serve
hoặc
php artisan serve --host=192.168.1.60 --port=8000
```
* Tạo thư mục storage và liên kết với nó
`php artisan storage:link`
* Tạo migration bảng
`php artisan make:migration create_product_table --create=product`
* Tạo seeder bảng
`php artisan make:seeder
ProductSeeder
`
* Chạy backup lại migration và seeder đồng loạt
`php artisan migrate:fresh --seed`
* Tạo model
`php artisan make:model Product`
* tạo .evn và gender token key
`php artisan key:generate`
**3. Config HOST**
* Path: C:\Windows\System32\drivers\etc
* Host: 192.168.1.60 laravelApp
**4. EXTENTION**
* Laravel Artisan --- *quản lý cache, DB, general key*
* Laravel Snippets
* Laravel Blade Snippets --- *Auto Div.class*
* Laravel Blade Spacer --- *Blade object {{ }}*
* Laravel goto view
* laravel-jump-controller
* Live Sass Compiler --- *Live css save*
* Vscode-icon --- *Change icon folder*
* Auto Close Tag
* PHP Formatter
**5. TRICK**
* Xem info version php
`return phpinfo();`
* Chỉ ra giá trị default nếu không thỏa
`b = a ?? 'null'`
* @unless = ifnot
* Kiểm tra route hiện tại trong blade view
`{{ Request::routeIs('home') ? 'active' : '' }}`
* Cách sử dụng biến trong .env (define environment variable)
`return env('NAME')`
* Dùng lib Carbon format datetime trong blade view
`{{ \Carbon\Carbon::parse($item->TIME_END)->format('H:m') }}`
* Url domain path: URL()
`<img src={{ URL('img/vituanAvt.jpg') }} >`
* whereNotNull('col')
* Cấu hình group_by elequoent 1 field -- *In mysql array, set to disable MySQL's strict mode*
```
config/database.php
strict => false
```
* Xử lý Ảnh
```
$request->file('image')
->guessExtension()); --- jpg, png lấy ra đuôi mở rộng
->getMineType --- image.jpg phải là file ảnh
->getClientOriginalName() --- lấy tên gốc file
->getSize() --- lấy kích thước file
->getError() --- trả về lỗi
->isValid
```
**6. PHP DEBUG**
* Cài đặt Xdebug với php_info()
https://xdebug.org/wizard
* Dán đoạn sau vào cuối file php.ini
```
[XDebug]
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9003
xdebug.log_level=7
xdebug.idekey=VSCODE
xdebug.client_host="192.168.1.60"
zend_extension="C:\xampp\php\ext\php_xdebug.dll"
```
**7. SCSS , LARAVEL MIX**
```
webpack.mix.js
mix.js('resources/js/app.js', 'public/js')
.sass('resources/scss/app.scss', 'public/css', [
//
]);
type package.json
npm i
npm run watch
```
**8. Temp**
```
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class NameIPController extends Controller
{
public static function getUserIpAddr(){
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
}
$ipaddress = DeviceIP::getUserIpAddr();
```
**9. LIBRARY**
1. **Guzzle**: là một PHP HTTP client giúp việc gửi HTTP request trở nên đơn giản "Mail"
`composer require guzzlehttp/guzzle`
2. Thanh toán online
```
B1: composer require stripe/stripe-php // payment install
B2: composer require laravel/cashier
B3: khai bao service
'stripe' => [
'secret' => env('STRIPE_SECRET'),
'key' => env('STRIPE_KEY'),
'webhook_secret' => env('STRIPE_WEBHOOK_SECRET'),
],
B4: .evn khai bao secret key
STRIPE_KEY
STRIPE_SECRET
Example Visa:
VISA
4242424242424242
232
03/27
get example card to payment
https://stripe.com/docs/testing?testing-method=card-numbers#cards
pass: vituan@1397
xem danh sách thanh toán
https://dashboard.stripe.com/test/payments
```
3. Excel
```
composer require phpoffice/phpspreadsheet
use Illuminate\Support\Facades\Session;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
```