浏览代码

init version

master
azri 2 天前
当前提交
c8a8ce9087
共有 61 个文件被更改,包括 2375 次插入0 次删除
  1. 18
    0
      .editorconfig
  2. 11
    0
      .gitattributes
  3. 12
    0
      .github/workflows/issues.yml
  4. 12
    0
      .github/workflows/pull-requests.yml
  5. 47
    0
      .github/workflows/tests.yml
  6. 13
    0
      .github/workflows/update-changelog.yml
  7. 48
    0
      .gitignore
  8. 9
    0
      .styleci.yml
  9. 124
    0
      CHANGELOG.md
  10. 66
    0
      README.md
  11. 8
    0
      app/Http/Controllers/Controller.php
  12. 48
    0
      app/Models/User.php
  13. 24
    0
      app/Providers/AppServiceProvider.php
  14. 26
    0
      app/View/Components/Table.php
  15. 15
    0
      artisan
  16. 18
    0
      bootstrap/app.php
  17. 2
    0
      bootstrap/cache/.gitignore
  18. 5
    0
      bootstrap/providers.php
  19. 71
    0
      composer.json
  20. 126
    0
      config/app.php
  21. 115
    0
      config/auth.php
  22. 108
    0
      config/cache.php
  23. 173
    0
      config/database.php
  24. 80
    0
      config/filesystems.php
  25. 132
    0
      config/logging.php
  26. 116
    0
      config/mail.php
  27. 112
    0
      config/queue.php
  28. 38
    0
      config/services.php
  29. 217
    0
      config/session.php
  30. 1
    0
      database/.gitignore
  31. 44
    0
      database/factories/UserFactory.php
  32. 49
    0
      database/migrations/0001_01_01_000000_create_users_table.php
  33. 35
    0
      database/migrations/0001_01_01_000001_create_cache_table.php
  34. 57
    0
      database/migrations/0001_01_01_000002_create_jobs_table.php
  35. 23
    0
      database/seeders/DatabaseSeeder.php
  36. 17
    0
      package.json
  37. 33
    0
      phpunit.xml
  38. 6
    0
      postcss.config.js
  39. 25
    0
      public/.htaccess
  40. 0
    0
      public/favicon.ico
  41. 1
    0
      public/hot
  42. 17
    0
      public/index.php
  43. 2
    0
      public/robots.txt
  44. 3
    0
      resources/css/app.css
  45. 1
    0
      resources/js/app.js
  46. 4
    0
      resources/js/bootstrap.js
  47. 3
    0
      resources/views/components/table.blade.php
  48. 78
    0
      resources/views/home.blade.php
  49. 72
    0
      resources/views/layouts/main.blade.php
  50. 8
    0
      routes/console.php
  51. 7
    0
      routes/web.php
  52. 4
    0
      storage/app/.gitignore
  53. 2
    0
      storage/app/private/.gitignore
  54. 2
    0
      storage/app/public/.gitignore
  55. 9
    0
      storage/framework/.gitignore
  56. 2
    0
      storage/logs/.gitignore
  57. 20
    0
      tailwind.config.js
  58. 19
    0
      tests/Feature/ExampleTest.php
  59. 10
    0
      tests/TestCase.php
  60. 16
    0
      tests/Unit/ExampleTest.php
  61. 11
    0
      vite.config.js

+ 18
- 0
.editorconfig 查看文件

@@ -0,0 +1,18 @@
1
+root = true
2
+
3
+[*]
4
+charset = utf-8
5
+end_of_line = lf
6
+indent_size = 4
7
+indent_style = space
8
+insert_final_newline = true
9
+trim_trailing_whitespace = true
10
+
11
+[*.md]
12
+trim_trailing_whitespace = false
13
+
14
+[*.{yml,yaml}]
15
+indent_size = 2
16
+
17
+[docker-compose.yml]
18
+indent_size = 4

+ 11
- 0
.gitattributes 查看文件

@@ -0,0 +1,11 @@
1
+* text=auto eol=lf
2
+
3
+*.blade.php diff=html
4
+*.css diff=css
5
+*.html diff=html
6
+*.md diff=markdown
7
+*.php diff=php
8
+
9
+/.github export-ignore
10
+CHANGELOG.md export-ignore
11
+.styleci.yml export-ignore

+ 12
- 0
.github/workflows/issues.yml 查看文件

@@ -0,0 +1,12 @@
1
+name: Issues
2
+
3
+on:
4
+  issues:
5
+    types: [labeled]
6
+
7
+permissions:
8
+  issues: write
9
+
10
+jobs:
11
+  help-wanted:
12
+    uses: laravel/.github/.github/workflows/issues.yml@main

+ 12
- 0
.github/workflows/pull-requests.yml 查看文件

@@ -0,0 +1,12 @@
1
+name: Pull Requests
2
+
3
+on:
4
+  pull_request_target:
5
+    types: [opened]
6
+
7
+permissions:
8
+  pull-requests: write
9
+
10
+jobs:
11
+  uneditable:
12
+    uses: laravel/.github/.github/workflows/pull-requests.yml@main

+ 47
- 0
.github/workflows/tests.yml 查看文件

@@ -0,0 +1,47 @@
1
+name: Tests
2
+
3
+on:
4
+  push:
5
+    branches:
6
+      - master
7
+      - '*.x'
8
+  pull_request:
9
+  schedule:
10
+    - cron: '0 0 * * *'
11
+
12
+permissions:
13
+  contents: read
14
+
15
+jobs:
16
+  tests:
17
+    runs-on: ubuntu-latest
18
+
19
+    strategy:
20
+      fail-fast: true
21
+      matrix:
22
+        php: [8.2, 8.3, 8.4]
23
+
24
+    name: PHP ${{ matrix.php }}
25
+
26
+    steps:
27
+      - name: Checkout code
28
+        uses: actions/checkout@v4
29
+
30
+      - name: Setup PHP
31
+        uses: shivammathur/setup-php@v2
32
+        with:
33
+          php-version: ${{ matrix.php }}
34
+          extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite
35
+          coverage: none
36
+
37
+      - name: Install Composer dependencies
38
+        run: composer install --prefer-dist --no-interaction --no-progress
39
+
40
+      - name: Copy environment file
41
+        run: cp .env.example .env
42
+
43
+      - name: Generate app key
44
+        run: php artisan key:generate
45
+
46
+      - name: Execute tests
47
+        run: vendor/bin/phpunit

+ 13
- 0
.github/workflows/update-changelog.yml 查看文件

@@ -0,0 +1,13 @@
1
+name: Update Changelog
2
+
3
+on:
4
+  release:
5
+    types: [released]
6
+
7
+permissions: {}
8
+
9
+jobs:
10
+  update:
11
+    permissions:
12
+      contents: write
13
+    uses: laravel/.github/.github/workflows/update-changelog.yml@main

+ 48
- 0
.gitignore 查看文件

@@ -0,0 +1,48 @@
1
+# Laravel-specific
2
+/vendor
3
+/node_modules
4
+/public/storage
5
+/storage/*.key
6
+.env
7
+.env.*
8
+Homestead.yaml
9
+Homestead.json
10
+/.vagrant
11
+.phpunit.result.cache
12
+.phpstorm.meta.php
13
+.idea/
14
+*.log
15
+*.sqlite
16
+*.sqlite3
17
+*.sublime-project
18
+*.sublime-workspace
19
+
20
+# Laravel Sail
21
+docker-compose.override.yml
22
+
23
+# Composer and npm
24
+composer.lock
25
+package-lock.json
26
+yarn.lock
27
+
28
+# Cache and Logs
29
+/storage/framework/*
30
+!/storage/framework/.gitignore
31
+/storage/logs/*
32
+!/storage/logs/.gitignore
33
+/bootstrap/cache/*
34
+!/bootstrap/cache/.gitignore
35
+
36
+# IDEs and Editors
37
+.vscode/
38
+*.swp
39
+*.bak
40
+*.tmp
41
+
42
+# OS Files
43
+.DS_Store
44
+Thumbs.db
45
+
46
+# Optional: ignore tests results or coverage
47
+/coverage/
48
+tests/Results/

+ 9
- 0
.styleci.yml 查看文件

@@ -0,0 +1,9 @@
1
+php:
2
+  preset: laravel
3
+  disabled:
4
+    - no_unused_imports
5
+  finder:
6
+    not-name:
7
+      - index.php
8
+js: true
9
+css: true

+ 124
- 0
CHANGELOG.md 查看文件

@@ -0,0 +1,124 @@
1
+# Release Notes
2
+
3
+## [Unreleased](https://github.com/laravel/laravel/compare/v11.6.0...11.x)
4
+
5
+## [v11.6.0](https://github.com/laravel/laravel/compare/v11.5.1...v11.6.0) - 2025-01-21
6
+
7
+* Preserve X-Xsrf-Token header from .htaccess by [@thecodeholic](https://github.com/thecodeholic) in https://github.com/laravel/laravel/pull/6520
8
+
9
+## [v11.5.1](https://github.com/laravel/laravel/compare/v11.5.0...v11.5.1) - 2025-01-10
10
+
11
+* Update .gitignore to not ignore auth.json in the lang directory. by [@Tjoosten](https://github.com/Tjoosten) in https://github.com/laravel/laravel/pull/6515
12
+* Adding PHP 8.4 to the tests matrix by [@mathiasgrimm](https://github.com/mathiasgrimm) in https://github.com/laravel/laravel/pull/6516
13
+* fix css whitespace invalid-calc by [@tvarwig](https://github.com/tvarwig) in https://github.com/laravel/laravel/pull/6517
14
+* [11.x] Fix invalid tailwindcss class by [@Jubeki](https://github.com/Jubeki) in https://github.com/laravel/laravel/pull/6518
15
+
16
+## [v11.5.0](https://github.com/laravel/laravel/compare/v11.4.0...v11.5.0) - 2024-12-13
17
+
18
+* [11.x] Update `config/mail.php` with supported configuration by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/laravel/pull/6506
19
+
20
+## [v11.4.0](https://github.com/laravel/laravel/compare/v11.3.3...v11.4.0) - 2024-12-02
21
+
22
+* [11.x] Narrow down array types to lists by [@DvDty](https://github.com/DvDty) in https://github.com/laravel/laravel/pull/6497
23
+* Upgrade to Vite 6 by [@timacdonald](https://github.com/timacdonald) in https://github.com/laravel/laravel/pull/6498
24
+
25
+## [v11.3.3](https://github.com/laravel/laravel/compare/v11.3.2...v11.3.3) - 2024-11-18
26
+
27
+* Inconsistency in Github action names by [@amirbabaeii](https://github.com/amirbabaeii) in https://github.com/laravel/laravel/pull/6478
28
+* Add schema property to enhance autocompletion for composer.json by [@octoper](https://github.com/octoper) in https://github.com/laravel/laravel/pull/6484
29
+* Update .gitignore by [@EmranMR](https://github.com/EmranMR) in https://github.com/laravel/laravel/pull/6486
30
+* [11.x] Bump framework version by [@PerryvanderMeer](https://github.com/PerryvanderMeer) in https://github.com/laravel/laravel/pull/6490
31
+* [11.x] match `HidesAttributes` docblocks by [@browner12](https://github.com/browner12) in https://github.com/laravel/laravel/pull/6495
32
+
33
+## [v11.3.2](https://github.com/laravel/laravel/compare/v11.3.1...v11.3.2) - 2024-10-21
34
+
35
+* Fixes pail timing out after an hour by [@nunomaduro](https://github.com/nunomaduro) in https://github.com/laravel/laravel/pull/6473
36
+
37
+## [v11.3.1](https://github.com/laravel/laravel/compare/v11.3.0...v11.3.1) - 2024-10-15
38
+
39
+**Full Changelog**: https://github.com/laravel/laravel/compare/v11.3.0...v11.3.1
40
+
41
+## [v11.3.0](https://github.com/laravel/laravel/compare/v11.2.1...v11.3.0) - 2024-10-14
42
+
43
+* Add Tailwind, "composer run dev" by [@taylorotwell](https://github.com/taylorotwell) in https://github.com/laravel/laravel/pull/6463
44
+
45
+## [v11.2.1](https://github.com/laravel/laravel/compare/v11.2.0...v11.2.1) - 2024-10-08
46
+
47
+* [11.x] Collision Version Upgrade by [@amdad121](https://github.com/amdad121) in https://github.com/laravel/laravel/pull/6454
48
+* [11.x] factory-generics-in-user-model by [@MrPunyapal](https://github.com/MrPunyapal) in https://github.com/laravel/laravel/pull/6453
49
+* Update welcome.blade.php to add missing alt tag by [@mezotv](https://github.com/mezotv) in https://github.com/laravel/laravel/pull/6462
50
+
51
+## [v11.2.0](https://github.com/laravel/laravel/compare/v11.1.5...v11.2.0) - 2024-09-11
52
+
53
+* Update .gitignore with Zed Editor by [@fahadkhan1740](https://github.com/fahadkhan1740) in https://github.com/laravel/laravel/pull/6449
54
+* Laracon 2024 feature update by [@taylorotwell](https://github.com/taylorotwell) in https://github.com/laravel/laravel/pull/6450
55
+
56
+## [v11.1.5](https://github.com/laravel/laravel/compare/v11.1.4...v11.1.5) - 2024-08-14
57
+
58
+* Update axios by [@laserhybiz](https://github.com/laserhybiz) in https://github.com/laravel/laravel/pull/6440
59
+
60
+## [v11.1.4](https://github.com/laravel/laravel/compare/v11.1.3...v11.1.4) - 2024-07-16
61
+
62
+**Full Changelog**: https://github.com/laravel/laravel/compare/v11.1.3...v11.1.4
63
+
64
+## [v11.1.3](https://github.com/laravel/laravel/compare/v11.1.2...v11.1.3) - 2024-07-03
65
+
66
+* [11.x] Comment maintenance store by [@timacdonald](https://github.com/timacdonald) in https://github.com/laravel/laravel/pull/6429
67
+
68
+## [v11.1.2](https://github.com/laravel/laravel/compare/v11.1.1...v11.1.2) - 2024-06-20
69
+
70
+* Expose lock table name by [@nhedger](https://github.com/nhedger) in https://github.com/laravel/laravel/pull/6423
71
+
72
+## [v11.1.1](https://github.com/laravel/laravel/compare/v11.1.0...v11.1.1) - 2024-06-04
73
+
74
+* Format the first letter of `drivers`  to lowercase by [@maru0914](https://github.com/maru0914) in https://github.com/laravel/laravel/pull/6413
75
+
76
+## [v11.1.0](https://github.com/laravel/laravel/compare/v11.0.9...v11.1.0) - 2024-05-28
77
+
78
+* [11.x] Removes `--dev` dependencies by [@nunomaduro](https://github.com/nunomaduro) in https://github.com/laravel/laravel/pull/6406
79
+
80
+## [v11.0.9](https://github.com/laravel/laravel/compare/v11.0.8...v11.0.9) - 2024-05-16
81
+
82
+* Updated SMTP mail config to use a valid EHLO domain by [@rcerljenko](https://github.com/rcerljenko) in https://github.com/laravel/laravel/pull/6402
83
+
84
+## [v11.0.8](https://github.com/laravel/laravel/compare/v11.0.7...v11.0.8) - 2024-05-13
85
+
86
+* Add .phpactor.json to .gitignore by [@princejohnsantillan](https://github.com/princejohnsantillan) in https://github.com/laravel/laravel/pull/6400
87
+
88
+## [v11.0.7](https://github.com/laravel/laravel/compare/v11.0.6...v11.0.7) - 2024-05-03
89
+
90
+* Remove obsolete driver option by [@u01jmg3](https://github.com/u01jmg3) in https://github.com/laravel/laravel/pull/6395
91
+
92
+## [v11.0.6](https://github.com/laravel/laravel/compare/v11.0.5...v11.0.6) - 2024-04-09
93
+
94
+* Fix PHPUnit constraint by [@szepeviktor](https://github.com/szepeviktor) in https://github.com/laravel/laravel/pull/6389
95
+* [11.x] Add missing roundrobin transport driver config by [@u01jmg3](https://github.com/u01jmg3) in https://github.com/laravel/laravel/pull/6392
96
+
97
+## [v11.0.5](https://github.com/laravel/laravel/compare/v11.0.4...v11.0.5) - 2024-03-26
98
+
99
+* [11.x] Use PHPUnit v11 by [@philbates35](https://github.com/philbates35) in https://github.com/laravel/laravel/pull/6385
100
+
101
+## [v11.0.4](https://github.com/laravel/laravel/compare/v11.0.3...v11.0.4) - 2024-03-15
102
+
103
+* [11.x] Removed useless null parameter for env helper (cache.php) by [@siarheipashkevich](https://github.com/siarheipashkevich) in https://github.com/laravel/laravel/pull/6374
104
+* [11.x] Removed useless null parameter for env helper (queue.php) by [@siarheipashkevich](https://github.com/siarheipashkevich) in https://github.com/laravel/laravel/pull/6373
105
+* [11.x] Fix retry_after to be an integer by [@driesvints](https://github.com/driesvints) in https://github.com/laravel/laravel/pull/6377
106
+* [11.x] Fix on hover animation and ring by [@michaelnabil230](https://github.com/michaelnabil230) in https://github.com/laravel/laravel/pull/6376
107
+
108
+## [v11.0.3](https://github.com/laravel/laravel/compare/v11.0.2...v11.0.3) - 2024-03-14
109
+
110
+* [11.x] Revert collation change by [@driesvints](https://github.com/driesvints) in https://github.com/laravel/laravel/pull/6372
111
+
112
+## [v11.0.2](https://github.com/laravel/laravel/compare/v11.0.1...v11.0.2) - 2024-03-13
113
+
114
+* [11.x] Remove branch alias from composer.json by [@zepfietje](https://github.com/zepfietje) in https://github.com/laravel/laravel/pull/6366
115
+* [11.x] Fixes typo in welcome page by [@jrd-lewis](https://github.com/jrd-lewis) in https://github.com/laravel/laravel/pull/6363
116
+* change mariadb default by [@taylorotwell](https://github.com/taylorotwell) in https://github.com/laravel/laravel/commit/79969c99c6456a6d6edfbe78d241575fe1f65594
117
+
118
+## [v11.0.1](https://github.com/laravel/laravel/compare/v11.0.0...v11.0.1) - 2024-03-12
119
+
120
+* [11.x] Fixes SQLite driver missing by [@nunomaduro](https://github.com/nunomaduro) in https://github.com/laravel/laravel/pull/6361
121
+
122
+## [v11.0.0 (2023-02-17)](https://github.com/laravel/laravel/compare/v10.3.2...v11.0.0)
123
+
124
+Laravel 11 includes a variety of changes to the application skeleton. Please consult the diff to see what's new.

+ 66
- 0
README.md 查看文件

@@ -0,0 +1,66 @@
1
+<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
2
+
3
+<p align="center">
4
+<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
5
+<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
6
+<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
7
+<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
8
+</p>
9
+
10
+## About Laravel
11
+
12
+Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
13
+
14
+- [Simple, fast routing engine](https://laravel.com/docs/routing).
15
+- [Powerful dependency injection container](https://laravel.com/docs/container).
16
+- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
17
+- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
18
+- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
19
+- [Robust background job processing](https://laravel.com/docs/queues).
20
+- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
21
+
22
+Laravel is accessible, powerful, and provides tools required for large, robust applications.
23
+
24
+## Learning Laravel
25
+
26
+Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
27
+
28
+You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch.
29
+
30
+If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
31
+
32
+## Laravel Sponsors
33
+
34
+We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
35
+
36
+### Premium Partners
37
+
38
+- **[Vehikl](https://vehikl.com/)**
39
+- **[Tighten Co.](https://tighten.co)**
40
+- **[WebReinvent](https://webreinvent.com/)**
41
+- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
42
+- **[64 Robots](https://64robots.com)**
43
+- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
44
+- **[Cyber-Duck](https://cyber-duck.co.uk)**
45
+- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
46
+- **[Jump24](https://jump24.co.uk)**
47
+- **[Redberry](https://redberry.international/laravel/)**
48
+- **[Active Logic](https://activelogic.com)**
49
+- **[byte5](https://byte5.de)**
50
+- **[OP.GG](https://op.gg)**
51
+
52
+## Contributing
53
+
54
+Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
55
+
56
+## Code of Conduct
57
+
58
+In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
59
+
60
+## Security Vulnerabilities
61
+
62
+If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
63
+
64
+## License
65
+
66
+The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).

+ 8
- 0
app/Http/Controllers/Controller.php 查看文件

@@ -0,0 +1,8 @@
1
+<?php
2
+
3
+namespace App\Http\Controllers;
4
+
5
+abstract class Controller
6
+{
7
+    //
8
+}

+ 48
- 0
app/Models/User.php 查看文件

@@ -0,0 +1,48 @@
1
+<?php
2
+
3
+namespace App\Models;
4
+
5
+// use Illuminate\Contracts\Auth\MustVerifyEmail;
6
+use Illuminate\Database\Eloquent\Factories\HasFactory;
7
+use Illuminate\Foundation\Auth\User as Authenticatable;
8
+use Illuminate\Notifications\Notifiable;
9
+
10
+class User extends Authenticatable
11
+{
12
+    /** @use HasFactory<\Database\Factories\UserFactory> */
13
+    use HasFactory, Notifiable;
14
+
15
+    /**
16
+     * The attributes that are mass assignable.
17
+     *
18
+     * @var list<string>
19
+     */
20
+    protected $fillable = [
21
+        'name',
22
+        'email',
23
+        'password',
24
+    ];
25
+
26
+    /**
27
+     * The attributes that should be hidden for serialization.
28
+     *
29
+     * @var list<string>
30
+     */
31
+    protected $hidden = [
32
+        'password',
33
+        'remember_token',
34
+    ];
35
+
36
+    /**
37
+     * Get the attributes that should be cast.
38
+     *
39
+     * @return array<string, string>
40
+     */
41
+    protected function casts(): array
42
+    {
43
+        return [
44
+            'email_verified_at' => 'datetime',
45
+            'password' => 'hashed',
46
+        ];
47
+    }
48
+}

+ 24
- 0
app/Providers/AppServiceProvider.php 查看文件

@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+namespace App\Providers;
4
+
5
+use Illuminate\Support\ServiceProvider;
6
+
7
+class AppServiceProvider extends ServiceProvider
8
+{
9
+    /**
10
+     * Register any application services.
11
+     */
12
+    public function register(): void
13
+    {
14
+        //
15
+    }
16
+
17
+    /**
18
+     * Bootstrap any application services.
19
+     */
20
+    public function boot(): void
21
+    {
22
+        //
23
+    }
24
+}

+ 26
- 0
app/View/Components/Table.php 查看文件

@@ -0,0 +1,26 @@
1
+<?php
2
+
3
+namespace App\View\Components;
4
+
5
+use Closure;
6
+use Illuminate\View\Component;
7
+use Illuminate\Contracts\View\View;
8
+
9
+class Table extends Component
10
+{
11
+    /**
12
+     * Create a new component instance.
13
+     */
14
+    public function __construct()
15
+    {
16
+        //
17
+    }
18
+
19
+    /**
20
+     * Get the view / contents that represent the component.
21
+     */
22
+    public function render(): View|Closure|string
23
+    {
24
+        return view('components.table');
25
+    }
26
+}

+ 15
- 0
artisan 查看文件

@@ -0,0 +1,15 @@
1
+#!/usr/bin/env php
2
+<?php
3
+
4
+use Symfony\Component\Console\Input\ArgvInput;
5
+
6
+define('LARAVEL_START', microtime(true));
7
+
8
+// Register the Composer autoloader...
9
+require __DIR__.'/vendor/autoload.php';
10
+
11
+// Bootstrap Laravel and handle the command...
12
+$status = (require_once __DIR__.'/bootstrap/app.php')
13
+    ->handleCommand(new ArgvInput);
14
+
15
+exit($status);

+ 18
- 0
bootstrap/app.php 查看文件

@@ -0,0 +1,18 @@
1
+<?php
2
+
3
+use Illuminate\Foundation\Application;
4
+use Illuminate\Foundation\Configuration\Exceptions;
5
+use Illuminate\Foundation\Configuration\Middleware;
6
+
7
+return Application::configure(basePath: dirname(__DIR__))
8
+    ->withRouting(
9
+        web: __DIR__.'/../routes/web.php',
10
+        commands: __DIR__.'/../routes/console.php',
11
+        health: '/up',
12
+    )
13
+    ->withMiddleware(function (Middleware $middleware) {
14
+        //
15
+    })
16
+    ->withExceptions(function (Exceptions $exceptions) {
17
+        //
18
+    })->create();

+ 2
- 0
bootstrap/cache/.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 5
- 0
bootstrap/providers.php 查看文件

@@ -0,0 +1,5 @@
1
+<?php
2
+
3
+return [
4
+    App\Providers\AppServiceProvider::class,
5
+];

+ 71
- 0
composer.json 查看文件

@@ -0,0 +1,71 @@
1
+{
2
+    "$schema": "https://getcomposer.org/schema.json",
3
+    "name": "laravel/laravel",
4
+    "type": "project",
5
+    "description": "The skeleton application for the Laravel framework.",
6
+    "keywords": ["laravel", "framework"],
7
+    "license": "MIT",
8
+    "require": {
9
+        "php": "^8.2",
10
+        "laravel/framework": "^11.31",
11
+        "laravel/tinker": "^2.9"
12
+    },
13
+    "require-dev": {
14
+        "fakerphp/faker": "^1.23",
15
+        "laravel/pail": "^1.1",
16
+        "laravel/pint": "^1.13",
17
+        "laravel/sail": "^1.26",
18
+        "mockery/mockery": "^1.6",
19
+        "nunomaduro/collision": "^8.1",
20
+        "phpunit/phpunit": "^11.0.1"
21
+    },
22
+    "autoload": {
23
+        "psr-4": {
24
+            "App\\": "app/",
25
+            "Database\\Factories\\": "database/factories/",
26
+            "Database\\Seeders\\": "database/seeders/"
27
+        }
28
+    },
29
+    "autoload-dev": {
30
+        "psr-4": {
31
+            "Tests\\": "tests/"
32
+        }
33
+    },
34
+    "scripts": {
35
+        "post-autoload-dump": [
36
+            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
37
+            "@php artisan package:discover --ansi"
38
+        ],
39
+        "post-update-cmd": [
40
+            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
41
+        ],
42
+        "post-root-package-install": [
43
+            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
44
+        ],
45
+        "post-create-project-cmd": [
46
+            "@php artisan key:generate --ansi",
47
+            "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
48
+            "@php artisan migrate --graceful --ansi"
49
+        ],
50
+        "dev": [
51
+            "Composer\\Config::disableProcessTimeout",
52
+            "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite"
53
+        ]
54
+    },
55
+    "extra": {
56
+        "laravel": {
57
+            "dont-discover": []
58
+        }
59
+    },
60
+    "config": {
61
+        "optimize-autoloader": true,
62
+        "preferred-install": "dist",
63
+        "sort-packages": true,
64
+        "allow-plugins": {
65
+            "pestphp/pest-plugin": true,
66
+            "php-http/discovery": true
67
+        }
68
+    },
69
+    "minimum-stability": "stable",
70
+    "prefer-stable": true
71
+}

+ 126
- 0
config/app.php 查看文件

@@ -0,0 +1,126 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Application Name
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This value is the name of your application, which will be used when the
11
+    | framework needs to place the application's name in a notification or
12
+    | other UI elements where an application name needs to be displayed.
13
+    |
14
+    */
15
+
16
+    'name' => env('APP_NAME', 'Laravel'),
17
+
18
+    /*
19
+    |--------------------------------------------------------------------------
20
+    | Application Environment
21
+    |--------------------------------------------------------------------------
22
+    |
23
+    | This value determines the "environment" your application is currently
24
+    | running in. This may determine how you prefer to configure various
25
+    | services the application utilizes. Set this in your ".env" file.
26
+    |
27
+    */
28
+
29
+    'env' => env('APP_ENV', 'production'),
30
+
31
+    /*
32
+    |--------------------------------------------------------------------------
33
+    | Application Debug Mode
34
+    |--------------------------------------------------------------------------
35
+    |
36
+    | When your application is in debug mode, detailed error messages with
37
+    | stack traces will be shown on every error that occurs within your
38
+    | application. If disabled, a simple generic error page is shown.
39
+    |
40
+    */
41
+
42
+    'debug' => (bool) env('APP_DEBUG', false),
43
+
44
+    /*
45
+    |--------------------------------------------------------------------------
46
+    | Application URL
47
+    |--------------------------------------------------------------------------
48
+    |
49
+    | This URL is used by the console to properly generate URLs when using
50
+    | the Artisan command line tool. You should set this to the root of
51
+    | the application so that it's available within Artisan commands.
52
+    |
53
+    */
54
+
55
+    'url' => env('APP_URL', 'http://localhost'),
56
+
57
+    /*
58
+    |--------------------------------------------------------------------------
59
+    | Application Timezone
60
+    |--------------------------------------------------------------------------
61
+    |
62
+    | Here you may specify the default timezone for your application, which
63
+    | will be used by the PHP date and date-time functions. The timezone
64
+    | is set to "UTC" by default as it is suitable for most use cases.
65
+    |
66
+    */
67
+
68
+    'timezone' => env('APP_TIMEZONE', 'UTC'),
69
+
70
+    /*
71
+    |--------------------------------------------------------------------------
72
+    | Application Locale Configuration
73
+    |--------------------------------------------------------------------------
74
+    |
75
+    | The application locale determines the default locale that will be used
76
+    | by Laravel's translation / localization methods. This option can be
77
+    | set to any locale for which you plan to have translation strings.
78
+    |
79
+    */
80
+
81
+    'locale' => env('APP_LOCALE', 'en'),
82
+
83
+    'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
84
+
85
+    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
86
+
87
+    /*
88
+    |--------------------------------------------------------------------------
89
+    | Encryption Key
90
+    |--------------------------------------------------------------------------
91
+    |
92
+    | This key is utilized by Laravel's encryption services and should be set
93
+    | to a random, 32 character string to ensure that all encrypted values
94
+    | are secure. You should do this prior to deploying the application.
95
+    |
96
+    */
97
+
98
+    'cipher' => 'AES-256-CBC',
99
+
100
+    'key' => env('APP_KEY'),
101
+
102
+    'previous_keys' => [
103
+        ...array_filter(
104
+            explode(',', env('APP_PREVIOUS_KEYS', ''))
105
+        ),
106
+    ],
107
+
108
+    /*
109
+    |--------------------------------------------------------------------------
110
+    | Maintenance Mode Driver
111
+    |--------------------------------------------------------------------------
112
+    |
113
+    | These configuration options determine the driver used to determine and
114
+    | manage Laravel's "maintenance mode" status. The "cache" driver will
115
+    | allow maintenance mode to be controlled across multiple machines.
116
+    |
117
+    | Supported drivers: "file", "cache"
118
+    |
119
+    */
120
+
121
+    'maintenance' => [
122
+        'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
123
+        'store' => env('APP_MAINTENANCE_STORE', 'database'),
124
+    ],
125
+
126
+];

+ 115
- 0
config/auth.php 查看文件

@@ -0,0 +1,115 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Authentication Defaults
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This option defines the default authentication "guard" and password
11
+    | reset "broker" for your application. You may change these values
12
+    | as required, but they're a perfect start for most applications.
13
+    |
14
+    */
15
+
16
+    'defaults' => [
17
+        'guard' => env('AUTH_GUARD', 'web'),
18
+        'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
19
+    ],
20
+
21
+    /*
22
+    |--------------------------------------------------------------------------
23
+    | Authentication Guards
24
+    |--------------------------------------------------------------------------
25
+    |
26
+    | Next, you may define every authentication guard for your application.
27
+    | Of course, a great default configuration has been defined for you
28
+    | which utilizes session storage plus the Eloquent user provider.
29
+    |
30
+    | All authentication guards have a user provider, which defines how the
31
+    | users are actually retrieved out of your database or other storage
32
+    | system used by the application. Typically, Eloquent is utilized.
33
+    |
34
+    | Supported: "session"
35
+    |
36
+    */
37
+
38
+    'guards' => [
39
+        'web' => [
40
+            'driver' => 'session',
41
+            'provider' => 'users',
42
+        ],
43
+    ],
44
+
45
+    /*
46
+    |--------------------------------------------------------------------------
47
+    | User Providers
48
+    |--------------------------------------------------------------------------
49
+    |
50
+    | All authentication guards have a user provider, which defines how the
51
+    | users are actually retrieved out of your database or other storage
52
+    | system used by the application. Typically, Eloquent is utilized.
53
+    |
54
+    | If you have multiple user tables or models you may configure multiple
55
+    | providers to represent the model / table. These providers may then
56
+    | be assigned to any extra authentication guards you have defined.
57
+    |
58
+    | Supported: "database", "eloquent"
59
+    |
60
+    */
61
+
62
+    'providers' => [
63
+        'users' => [
64
+            'driver' => 'eloquent',
65
+            'model' => env('AUTH_MODEL', App\Models\User::class),
66
+        ],
67
+
68
+        // 'users' => [
69
+        //     'driver' => 'database',
70
+        //     'table' => 'users',
71
+        // ],
72
+    ],
73
+
74
+    /*
75
+    |--------------------------------------------------------------------------
76
+    | Resetting Passwords
77
+    |--------------------------------------------------------------------------
78
+    |
79
+    | These configuration options specify the behavior of Laravel's password
80
+    | reset functionality, including the table utilized for token storage
81
+    | and the user provider that is invoked to actually retrieve users.
82
+    |
83
+    | The expiry time is the number of minutes that each reset token will be
84
+    | considered valid. This security feature keeps tokens short-lived so
85
+    | they have less time to be guessed. You may change this as needed.
86
+    |
87
+    | The throttle setting is the number of seconds a user must wait before
88
+    | generating more password reset tokens. This prevents the user from
89
+    | quickly generating a very large amount of password reset tokens.
90
+    |
91
+    */
92
+
93
+    'passwords' => [
94
+        'users' => [
95
+            'provider' => 'users',
96
+            'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
97
+            'expire' => 60,
98
+            'throttle' => 60,
99
+        ],
100
+    ],
101
+
102
+    /*
103
+    |--------------------------------------------------------------------------
104
+    | Password Confirmation Timeout
105
+    |--------------------------------------------------------------------------
106
+    |
107
+    | Here you may define the amount of seconds before a password confirmation
108
+    | window expires and users are asked to re-enter their password via the
109
+    | confirmation screen. By default, the timeout lasts for three hours.
110
+    |
111
+    */
112
+
113
+    'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
114
+
115
+];

+ 108
- 0
config/cache.php 查看文件

@@ -0,0 +1,108 @@
1
+<?php
2
+
3
+use Illuminate\Support\Str;
4
+
5
+return [
6
+
7
+    /*
8
+    |--------------------------------------------------------------------------
9
+    | Default Cache Store
10
+    |--------------------------------------------------------------------------
11
+    |
12
+    | This option controls the default cache store that will be used by the
13
+    | framework. This connection is utilized if another isn't explicitly
14
+    | specified when running a cache operation inside the application.
15
+    |
16
+    */
17
+
18
+    'default' => env('CACHE_STORE', 'database'),
19
+
20
+    /*
21
+    |--------------------------------------------------------------------------
22
+    | Cache Stores
23
+    |--------------------------------------------------------------------------
24
+    |
25
+    | Here you may define all of the cache "stores" for your application as
26
+    | well as their drivers. You may even define multiple stores for the
27
+    | same cache driver to group types of items stored in your caches.
28
+    |
29
+    | Supported drivers: "array", "database", "file", "memcached",
30
+    |                    "redis", "dynamodb", "octane", "null"
31
+    |
32
+    */
33
+
34
+    'stores' => [
35
+
36
+        'array' => [
37
+            'driver' => 'array',
38
+            'serialize' => false,
39
+        ],
40
+
41
+        'database' => [
42
+            'driver' => 'database',
43
+            'connection' => env('DB_CACHE_CONNECTION'),
44
+            'table' => env('DB_CACHE_TABLE', 'cache'),
45
+            'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
46
+            'lock_table' => env('DB_CACHE_LOCK_TABLE'),
47
+        ],
48
+
49
+        'file' => [
50
+            'driver' => 'file',
51
+            'path' => storage_path('framework/cache/data'),
52
+            'lock_path' => storage_path('framework/cache/data'),
53
+        ],
54
+
55
+        'memcached' => [
56
+            'driver' => 'memcached',
57
+            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
58
+            'sasl' => [
59
+                env('MEMCACHED_USERNAME'),
60
+                env('MEMCACHED_PASSWORD'),
61
+            ],
62
+            'options' => [
63
+                // Memcached::OPT_CONNECT_TIMEOUT => 2000,
64
+            ],
65
+            'servers' => [
66
+                [
67
+                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
68
+                    'port' => env('MEMCACHED_PORT', 11211),
69
+                    'weight' => 100,
70
+                ],
71
+            ],
72
+        ],
73
+
74
+        'redis' => [
75
+            'driver' => 'redis',
76
+            'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
77
+            'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
78
+        ],
79
+
80
+        'dynamodb' => [
81
+            'driver' => 'dynamodb',
82
+            'key' => env('AWS_ACCESS_KEY_ID'),
83
+            'secret' => env('AWS_SECRET_ACCESS_KEY'),
84
+            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
85
+            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
86
+            'endpoint' => env('DYNAMODB_ENDPOINT'),
87
+        ],
88
+
89
+        'octane' => [
90
+            'driver' => 'octane',
91
+        ],
92
+
93
+    ],
94
+
95
+    /*
96
+    |--------------------------------------------------------------------------
97
+    | Cache Key Prefix
98
+    |--------------------------------------------------------------------------
99
+    |
100
+    | When utilizing the APC, database, memcached, Redis, and DynamoDB cache
101
+    | stores, there might be other applications using the same cache. For
102
+    | that reason, you may prefix every cache key to avoid collisions.
103
+    |
104
+    */
105
+
106
+    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
107
+
108
+];

+ 173
- 0
config/database.php 查看文件

@@ -0,0 +1,173 @@
1
+<?php
2
+
3
+use Illuminate\Support\Str;
4
+
5
+return [
6
+
7
+    /*
8
+    |--------------------------------------------------------------------------
9
+    | Default Database Connection Name
10
+    |--------------------------------------------------------------------------
11
+    |
12
+    | Here you may specify which of the database connections below you wish
13
+    | to use as your default connection for database operations. This is
14
+    | the connection which will be utilized unless another connection
15
+    | is explicitly specified when you execute a query / statement.
16
+    |
17
+    */
18
+
19
+    'default' => env('DB_CONNECTION', 'sqlite'),
20
+
21
+    /*
22
+    |--------------------------------------------------------------------------
23
+    | Database Connections
24
+    |--------------------------------------------------------------------------
25
+    |
26
+    | Below are all of the database connections defined for your application.
27
+    | An example configuration is provided for each database system which
28
+    | is supported by Laravel. You're free to add / remove connections.
29
+    |
30
+    */
31
+
32
+    'connections' => [
33
+
34
+        'sqlite' => [
35
+            'driver' => 'sqlite',
36
+            'url' => env('DB_URL'),
37
+            'database' => env('DB_DATABASE', database_path('database.sqlite')),
38
+            'prefix' => '',
39
+            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
40
+            'busy_timeout' => null,
41
+            'journal_mode' => null,
42
+            'synchronous' => null,
43
+        ],
44
+
45
+        'mysql' => [
46
+            'driver' => 'mysql',
47
+            'url' => env('DB_URL'),
48
+            'host' => env('DB_HOST', '127.0.0.1'),
49
+            'port' => env('DB_PORT', '3306'),
50
+            'database' => env('DB_DATABASE', 'laravel'),
51
+            'username' => env('DB_USERNAME', 'root'),
52
+            'password' => env('DB_PASSWORD', ''),
53
+            'unix_socket' => env('DB_SOCKET', ''),
54
+            'charset' => env('DB_CHARSET', 'utf8mb4'),
55
+            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
56
+            'prefix' => '',
57
+            'prefix_indexes' => true,
58
+            'strict' => true,
59
+            'engine' => null,
60
+            'options' => extension_loaded('pdo_mysql') ? array_filter([
61
+                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
62
+            ]) : [],
63
+        ],
64
+
65
+        'mariadb' => [
66
+            'driver' => 'mariadb',
67
+            'url' => env('DB_URL'),
68
+            'host' => env('DB_HOST', '127.0.0.1'),
69
+            'port' => env('DB_PORT', '3306'),
70
+            'database' => env('DB_DATABASE', 'laravel'),
71
+            'username' => env('DB_USERNAME', 'root'),
72
+            'password' => env('DB_PASSWORD', ''),
73
+            'unix_socket' => env('DB_SOCKET', ''),
74
+            'charset' => env('DB_CHARSET', 'utf8mb4'),
75
+            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
76
+            'prefix' => '',
77
+            'prefix_indexes' => true,
78
+            'strict' => true,
79
+            'engine' => null,
80
+            'options' => extension_loaded('pdo_mysql') ? array_filter([
81
+                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
82
+            ]) : [],
83
+        ],
84
+
85
+        'pgsql' => [
86
+            'driver' => 'pgsql',
87
+            'url' => env('DB_URL'),
88
+            'host' => env('DB_HOST', '127.0.0.1'),
89
+            'port' => env('DB_PORT', '5432'),
90
+            'database' => env('DB_DATABASE', 'laravel'),
91
+            'username' => env('DB_USERNAME', 'root'),
92
+            'password' => env('DB_PASSWORD', ''),
93
+            'charset' => env('DB_CHARSET', 'utf8'),
94
+            'prefix' => '',
95
+            'prefix_indexes' => true,
96
+            'search_path' => 'public',
97
+            'sslmode' => 'prefer',
98
+        ],
99
+
100
+        'sqlsrv' => [
101
+            'driver' => 'sqlsrv',
102
+            'url' => env('DB_URL'),
103
+            'host' => env('DB_HOST', 'localhost'),
104
+            'port' => env('DB_PORT', '1433'),
105
+            'database' => env('DB_DATABASE', 'laravel'),
106
+            'username' => env('DB_USERNAME', 'root'),
107
+            'password' => env('DB_PASSWORD', ''),
108
+            'charset' => env('DB_CHARSET', 'utf8'),
109
+            'prefix' => '',
110
+            'prefix_indexes' => true,
111
+            // 'encrypt' => env('DB_ENCRYPT', 'yes'),
112
+            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
113
+        ],
114
+
115
+    ],
116
+
117
+    /*
118
+    |--------------------------------------------------------------------------
119
+    | Migration Repository Table
120
+    |--------------------------------------------------------------------------
121
+    |
122
+    | This table keeps track of all the migrations that have already run for
123
+    | your application. Using this information, we can determine which of
124
+    | the migrations on disk haven't actually been run on the database.
125
+    |
126
+    */
127
+
128
+    'migrations' => [
129
+        'table' => 'migrations',
130
+        'update_date_on_publish' => true,
131
+    ],
132
+
133
+    /*
134
+    |--------------------------------------------------------------------------
135
+    | Redis Databases
136
+    |--------------------------------------------------------------------------
137
+    |
138
+    | Redis is an open source, fast, and advanced key-value store that also
139
+    | provides a richer body of commands than a typical key-value system
140
+    | such as Memcached. You may define your connection settings here.
141
+    |
142
+    */
143
+
144
+    'redis' => [
145
+
146
+        'client' => env('REDIS_CLIENT', 'phpredis'),
147
+
148
+        'options' => [
149
+            'cluster' => env('REDIS_CLUSTER', 'redis'),
150
+            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
151
+        ],
152
+
153
+        'default' => [
154
+            'url' => env('REDIS_URL'),
155
+            'host' => env('REDIS_HOST', '127.0.0.1'),
156
+            'username' => env('REDIS_USERNAME'),
157
+            'password' => env('REDIS_PASSWORD'),
158
+            'port' => env('REDIS_PORT', '6379'),
159
+            'database' => env('REDIS_DB', '0'),
160
+        ],
161
+
162
+        'cache' => [
163
+            'url' => env('REDIS_URL'),
164
+            'host' => env('REDIS_HOST', '127.0.0.1'),
165
+            'username' => env('REDIS_USERNAME'),
166
+            'password' => env('REDIS_PASSWORD'),
167
+            'port' => env('REDIS_PORT', '6379'),
168
+            'database' => env('REDIS_CACHE_DB', '1'),
169
+        ],
170
+
171
+    ],
172
+
173
+];

+ 80
- 0
config/filesystems.php 查看文件

@@ -0,0 +1,80 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Filesystem Disk
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Here you may specify the default filesystem disk that should be used
11
+    | by the framework. The "local" disk, as well as a variety of cloud
12
+    | based disks are available to your application for file storage.
13
+    |
14
+    */
15
+
16
+    'default' => env('FILESYSTEM_DISK', 'local'),
17
+
18
+    /*
19
+    |--------------------------------------------------------------------------
20
+    | Filesystem Disks
21
+    |--------------------------------------------------------------------------
22
+    |
23
+    | Below you may configure as many filesystem disks as necessary, and you
24
+    | may even configure multiple disks for the same driver. Examples for
25
+    | most supported storage drivers are configured here for reference.
26
+    |
27
+    | Supported drivers: "local", "ftp", "sftp", "s3"
28
+    |
29
+    */
30
+
31
+    'disks' => [
32
+
33
+        'local' => [
34
+            'driver' => 'local',
35
+            'root' => storage_path('app/private'),
36
+            'serve' => true,
37
+            'throw' => false,
38
+            'report' => false,
39
+        ],
40
+
41
+        'public' => [
42
+            'driver' => 'local',
43
+            'root' => storage_path('app/public'),
44
+            'url' => env('APP_URL').'/storage',
45
+            'visibility' => 'public',
46
+            'throw' => false,
47
+            'report' => false,
48
+        ],
49
+
50
+        's3' => [
51
+            'driver' => 's3',
52
+            'key' => env('AWS_ACCESS_KEY_ID'),
53
+            'secret' => env('AWS_SECRET_ACCESS_KEY'),
54
+            'region' => env('AWS_DEFAULT_REGION'),
55
+            'bucket' => env('AWS_BUCKET'),
56
+            'url' => env('AWS_URL'),
57
+            'endpoint' => env('AWS_ENDPOINT'),
58
+            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
59
+            'throw' => false,
60
+            'report' => false,
61
+        ],
62
+
63
+    ],
64
+
65
+    /*
66
+    |--------------------------------------------------------------------------
67
+    | Symbolic Links
68
+    |--------------------------------------------------------------------------
69
+    |
70
+    | Here you may configure the symbolic links that will be created when the
71
+    | `storage:link` Artisan command is executed. The array keys should be
72
+    | the locations of the links and the values should be their targets.
73
+    |
74
+    */
75
+
76
+    'links' => [
77
+        public_path('storage') => storage_path('app/public'),
78
+    ],
79
+
80
+];

+ 132
- 0
config/logging.php 查看文件

@@ -0,0 +1,132 @@
1
+<?php
2
+
3
+use Monolog\Handler\NullHandler;
4
+use Monolog\Handler\StreamHandler;
5
+use Monolog\Handler\SyslogUdpHandler;
6
+use Monolog\Processor\PsrLogMessageProcessor;
7
+
8
+return [
9
+
10
+    /*
11
+    |--------------------------------------------------------------------------
12
+    | Default Log Channel
13
+    |--------------------------------------------------------------------------
14
+    |
15
+    | This option defines the default log channel that is utilized to write
16
+    | messages to your logs. The value provided here should match one of
17
+    | the channels present in the list of "channels" configured below.
18
+    |
19
+    */
20
+
21
+    'default' => env('LOG_CHANNEL', 'stack'),
22
+
23
+    /*
24
+    |--------------------------------------------------------------------------
25
+    | Deprecations Log Channel
26
+    |--------------------------------------------------------------------------
27
+    |
28
+    | This option controls the log channel that should be used to log warnings
29
+    | regarding deprecated PHP and library features. This allows you to get
30
+    | your application ready for upcoming major versions of dependencies.
31
+    |
32
+    */
33
+
34
+    'deprecations' => [
35
+        'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
36
+        'trace' => env('LOG_DEPRECATIONS_TRACE', false),
37
+    ],
38
+
39
+    /*
40
+    |--------------------------------------------------------------------------
41
+    | Log Channels
42
+    |--------------------------------------------------------------------------
43
+    |
44
+    | Here you may configure the log channels for your application. Laravel
45
+    | utilizes the Monolog PHP logging library, which includes a variety
46
+    | of powerful log handlers and formatters that you're free to use.
47
+    |
48
+    | Available drivers: "single", "daily", "slack", "syslog",
49
+    |                    "errorlog", "monolog", "custom", "stack"
50
+    |
51
+    */
52
+
53
+    'channels' => [
54
+
55
+        'stack' => [
56
+            'driver' => 'stack',
57
+            'channels' => explode(',', env('LOG_STACK', 'single')),
58
+            'ignore_exceptions' => false,
59
+        ],
60
+
61
+        'single' => [
62
+            'driver' => 'single',
63
+            'path' => storage_path('logs/laravel.log'),
64
+            'level' => env('LOG_LEVEL', 'debug'),
65
+            'replace_placeholders' => true,
66
+        ],
67
+
68
+        'daily' => [
69
+            'driver' => 'daily',
70
+            'path' => storage_path('logs/laravel.log'),
71
+            'level' => env('LOG_LEVEL', 'debug'),
72
+            'days' => env('LOG_DAILY_DAYS', 14),
73
+            'replace_placeholders' => true,
74
+        ],
75
+
76
+        'slack' => [
77
+            'driver' => 'slack',
78
+            'url' => env('LOG_SLACK_WEBHOOK_URL'),
79
+            'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
80
+            'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
81
+            'level' => env('LOG_LEVEL', 'critical'),
82
+            'replace_placeholders' => true,
83
+        ],
84
+
85
+        'papertrail' => [
86
+            'driver' => 'monolog',
87
+            'level' => env('LOG_LEVEL', 'debug'),
88
+            'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
89
+            'handler_with' => [
90
+                'host' => env('PAPERTRAIL_URL'),
91
+                'port' => env('PAPERTRAIL_PORT'),
92
+                'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
93
+            ],
94
+            'processors' => [PsrLogMessageProcessor::class],
95
+        ],
96
+
97
+        'stderr' => [
98
+            'driver' => 'monolog',
99
+            'level' => env('LOG_LEVEL', 'debug'),
100
+            'handler' => StreamHandler::class,
101
+            'formatter' => env('LOG_STDERR_FORMATTER'),
102
+            'with' => [
103
+                'stream' => 'php://stderr',
104
+            ],
105
+            'processors' => [PsrLogMessageProcessor::class],
106
+        ],
107
+
108
+        'syslog' => [
109
+            'driver' => 'syslog',
110
+            'level' => env('LOG_LEVEL', 'debug'),
111
+            'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
112
+            'replace_placeholders' => true,
113
+        ],
114
+
115
+        'errorlog' => [
116
+            'driver' => 'errorlog',
117
+            'level' => env('LOG_LEVEL', 'debug'),
118
+            'replace_placeholders' => true,
119
+        ],
120
+
121
+        'null' => [
122
+            'driver' => 'monolog',
123
+            'handler' => NullHandler::class,
124
+        ],
125
+
126
+        'emergency' => [
127
+            'path' => storage_path('logs/laravel.log'),
128
+        ],
129
+
130
+    ],
131
+
132
+];

+ 116
- 0
config/mail.php 查看文件

@@ -0,0 +1,116 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Mailer
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This option controls the default mailer that is used to send all email
11
+    | messages unless another mailer is explicitly specified when sending
12
+    | the message. All additional mailers can be configured within the
13
+    | "mailers" array. Examples of each type of mailer are provided.
14
+    |
15
+    */
16
+
17
+    'default' => env('MAIL_MAILER', 'log'),
18
+
19
+    /*
20
+    |--------------------------------------------------------------------------
21
+    | Mailer Configurations
22
+    |--------------------------------------------------------------------------
23
+    |
24
+    | Here you may configure all of the mailers used by your application plus
25
+    | their respective settings. Several examples have been configured for
26
+    | you and you are free to add your own as your application requires.
27
+    |
28
+    | Laravel supports a variety of mail "transport" drivers that can be used
29
+    | when delivering an email. You may specify which one you're using for
30
+    | your mailers below. You may also add additional mailers if needed.
31
+    |
32
+    | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
33
+    |            "postmark", "resend", "log", "array",
34
+    |            "failover", "roundrobin"
35
+    |
36
+    */
37
+
38
+    'mailers' => [
39
+
40
+        'smtp' => [
41
+            'transport' => 'smtp',
42
+            'scheme' => env('MAIL_SCHEME'),
43
+            'url' => env('MAIL_URL'),
44
+            'host' => env('MAIL_HOST', '127.0.0.1'),
45
+            'port' => env('MAIL_PORT', 2525),
46
+            'username' => env('MAIL_USERNAME'),
47
+            'password' => env('MAIL_PASSWORD'),
48
+            'timeout' => null,
49
+            'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
50
+        ],
51
+
52
+        'ses' => [
53
+            'transport' => 'ses',
54
+        ],
55
+
56
+        'postmark' => [
57
+            'transport' => 'postmark',
58
+            // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
59
+            // 'client' => [
60
+            //     'timeout' => 5,
61
+            // ],
62
+        ],
63
+
64
+        'resend' => [
65
+            'transport' => 'resend',
66
+        ],
67
+
68
+        'sendmail' => [
69
+            'transport' => 'sendmail',
70
+            'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
71
+        ],
72
+
73
+        'log' => [
74
+            'transport' => 'log',
75
+            'channel' => env('MAIL_LOG_CHANNEL'),
76
+        ],
77
+
78
+        'array' => [
79
+            'transport' => 'array',
80
+        ],
81
+
82
+        'failover' => [
83
+            'transport' => 'failover',
84
+            'mailers' => [
85
+                'smtp',
86
+                'log',
87
+            ],
88
+        ],
89
+
90
+        'roundrobin' => [
91
+            'transport' => 'roundrobin',
92
+            'mailers' => [
93
+                'ses',
94
+                'postmark',
95
+            ],
96
+        ],
97
+
98
+    ],
99
+
100
+    /*
101
+    |--------------------------------------------------------------------------
102
+    | Global "From" Address
103
+    |--------------------------------------------------------------------------
104
+    |
105
+    | You may wish for all emails sent by your application to be sent from
106
+    | the same address. Here you may specify a name and address that is
107
+    | used globally for all emails that are sent by your application.
108
+    |
109
+    */
110
+
111
+    'from' => [
112
+        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
113
+        'name' => env('MAIL_FROM_NAME', 'Example'),
114
+    ],
115
+
116
+];

+ 112
- 0
config/queue.php 查看文件

@@ -0,0 +1,112 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Default Queue Connection Name
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | Laravel's queue supports a variety of backends via a single, unified
11
+    | API, giving you convenient access to each backend using identical
12
+    | syntax for each. The default queue connection is defined below.
13
+    |
14
+    */
15
+
16
+    'default' => env('QUEUE_CONNECTION', 'database'),
17
+
18
+    /*
19
+    |--------------------------------------------------------------------------
20
+    | Queue Connections
21
+    |--------------------------------------------------------------------------
22
+    |
23
+    | Here you may configure the connection options for every queue backend
24
+    | used by your application. An example configuration is provided for
25
+    | each backend supported by Laravel. You're also free to add more.
26
+    |
27
+    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
28
+    |
29
+    */
30
+
31
+    'connections' => [
32
+
33
+        'sync' => [
34
+            'driver' => 'sync',
35
+        ],
36
+
37
+        'database' => [
38
+            'driver' => 'database',
39
+            'connection' => env('DB_QUEUE_CONNECTION'),
40
+            'table' => env('DB_QUEUE_TABLE', 'jobs'),
41
+            'queue' => env('DB_QUEUE', 'default'),
42
+            'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
43
+            'after_commit' => false,
44
+        ],
45
+
46
+        'beanstalkd' => [
47
+            'driver' => 'beanstalkd',
48
+            'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
49
+            'queue' => env('BEANSTALKD_QUEUE', 'default'),
50
+            'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
51
+            'block_for' => 0,
52
+            'after_commit' => false,
53
+        ],
54
+
55
+        'sqs' => [
56
+            'driver' => 'sqs',
57
+            'key' => env('AWS_ACCESS_KEY_ID'),
58
+            'secret' => env('AWS_SECRET_ACCESS_KEY'),
59
+            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
60
+            'queue' => env('SQS_QUEUE', 'default'),
61
+            'suffix' => env('SQS_SUFFIX'),
62
+            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
63
+            'after_commit' => false,
64
+        ],
65
+
66
+        'redis' => [
67
+            'driver' => 'redis',
68
+            'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
69
+            'queue' => env('REDIS_QUEUE', 'default'),
70
+            'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
71
+            'block_for' => null,
72
+            'after_commit' => false,
73
+        ],
74
+
75
+    ],
76
+
77
+    /*
78
+    |--------------------------------------------------------------------------
79
+    | Job Batching
80
+    |--------------------------------------------------------------------------
81
+    |
82
+    | The following options configure the database and table that store job
83
+    | batching information. These options can be updated to any database
84
+    | connection and table which has been defined by your application.
85
+    |
86
+    */
87
+
88
+    'batching' => [
89
+        'database' => env('DB_CONNECTION', 'sqlite'),
90
+        'table' => 'job_batches',
91
+    ],
92
+
93
+    /*
94
+    |--------------------------------------------------------------------------
95
+    | Failed Queue Jobs
96
+    |--------------------------------------------------------------------------
97
+    |
98
+    | These options configure the behavior of failed queue job logging so you
99
+    | can control how and where failed jobs are stored. Laravel ships with
100
+    | support for storing failed jobs in a simple file or in a database.
101
+    |
102
+    | Supported drivers: "database-uuids", "dynamodb", "file", "null"
103
+    |
104
+    */
105
+
106
+    'failed' => [
107
+        'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
108
+        'database' => env('DB_CONNECTION', 'sqlite'),
109
+        'table' => 'failed_jobs',
110
+    ],
111
+
112
+];

+ 38
- 0
config/services.php 查看文件

@@ -0,0 +1,38 @@
1
+<?php
2
+
3
+return [
4
+
5
+    /*
6
+    |--------------------------------------------------------------------------
7
+    | Third Party Services
8
+    |--------------------------------------------------------------------------
9
+    |
10
+    | This file is for storing the credentials for third party services such
11
+    | as Mailgun, Postmark, AWS and more. This file provides the de facto
12
+    | location for this type of information, allowing packages to have
13
+    | a conventional file to locate the various service credentials.
14
+    |
15
+    */
16
+
17
+    'postmark' => [
18
+        'token' => env('POSTMARK_TOKEN'),
19
+    ],
20
+
21
+    'ses' => [
22
+        'key' => env('AWS_ACCESS_KEY_ID'),
23
+        'secret' => env('AWS_SECRET_ACCESS_KEY'),
24
+        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
25
+    ],
26
+
27
+    'resend' => [
28
+        'key' => env('RESEND_KEY'),
29
+    ],
30
+
31
+    'slack' => [
32
+        'notifications' => [
33
+            'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
34
+            'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
35
+        ],
36
+    ],
37
+
38
+];

+ 217
- 0
config/session.php 查看文件

@@ -0,0 +1,217 @@
1
+<?php
2
+
3
+use Illuminate\Support\Str;
4
+
5
+return [
6
+
7
+    /*
8
+    |--------------------------------------------------------------------------
9
+    | Default Session Driver
10
+    |--------------------------------------------------------------------------
11
+    |
12
+    | This option determines the default session driver that is utilized for
13
+    | incoming requests. Laravel supports a variety of storage options to
14
+    | persist session data. Database storage is a great default choice.
15
+    |
16
+    | Supported: "file", "cookie", "database", "apc",
17
+    |            "memcached", "redis", "dynamodb", "array"
18
+    |
19
+    */
20
+
21
+    'driver' => env('SESSION_DRIVER', 'database'),
22
+
23
+    /*
24
+    |--------------------------------------------------------------------------
25
+    | Session Lifetime
26
+    |--------------------------------------------------------------------------
27
+    |
28
+    | Here you may specify the number of minutes that you wish the session
29
+    | to be allowed to remain idle before it expires. If you want them
30
+    | to expire immediately when the browser is closed then you may
31
+    | indicate that via the expire_on_close configuration option.
32
+    |
33
+    */
34
+
35
+    'lifetime' => (int) env('SESSION_LIFETIME', 120),
36
+
37
+    'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
38
+
39
+    /*
40
+    |--------------------------------------------------------------------------
41
+    | Session Encryption
42
+    |--------------------------------------------------------------------------
43
+    |
44
+    | This option allows you to easily specify that all of your session data
45
+    | should be encrypted before it's stored. All encryption is performed
46
+    | automatically by Laravel and you may use the session like normal.
47
+    |
48
+    */
49
+
50
+    'encrypt' => env('SESSION_ENCRYPT', false),
51
+
52
+    /*
53
+    |--------------------------------------------------------------------------
54
+    | Session File Location
55
+    |--------------------------------------------------------------------------
56
+    |
57
+    | When utilizing the "file" session driver, the session files are placed
58
+    | on disk. The default storage location is defined here; however, you
59
+    | are free to provide another location where they should be stored.
60
+    |
61
+    */
62
+
63
+    'files' => storage_path('framework/sessions'),
64
+
65
+    /*
66
+    |--------------------------------------------------------------------------
67
+    | Session Database Connection
68
+    |--------------------------------------------------------------------------
69
+    |
70
+    | When using the "database" or "redis" session drivers, you may specify a
71
+    | connection that should be used to manage these sessions. This should
72
+    | correspond to a connection in your database configuration options.
73
+    |
74
+    */
75
+
76
+    'connection' => env('SESSION_CONNECTION'),
77
+
78
+    /*
79
+    |--------------------------------------------------------------------------
80
+    | Session Database Table
81
+    |--------------------------------------------------------------------------
82
+    |
83
+    | When using the "database" session driver, you may specify the table to
84
+    | be used to store sessions. Of course, a sensible default is defined
85
+    | for you; however, you're welcome to change this to another table.
86
+    |
87
+    */
88
+
89
+    'table' => env('SESSION_TABLE', 'sessions'),
90
+
91
+    /*
92
+    |--------------------------------------------------------------------------
93
+    | Session Cache Store
94
+    |--------------------------------------------------------------------------
95
+    |
96
+    | When using one of the framework's cache driven session backends, you may
97
+    | define the cache store which should be used to store the session data
98
+    | between requests. This must match one of your defined cache stores.
99
+    |
100
+    | Affects: "apc", "dynamodb", "memcached", "redis"
101
+    |
102
+    */
103
+
104
+    'store' => env('SESSION_STORE'),
105
+
106
+    /*
107
+    |--------------------------------------------------------------------------
108
+    | Session Sweeping Lottery
109
+    |--------------------------------------------------------------------------
110
+    |
111
+    | Some session drivers must manually sweep their storage location to get
112
+    | rid of old sessions from storage. Here are the chances that it will
113
+    | happen on a given request. By default, the odds are 2 out of 100.
114
+    |
115
+    */
116
+
117
+    'lottery' => [2, 100],
118
+
119
+    /*
120
+    |--------------------------------------------------------------------------
121
+    | Session Cookie Name
122
+    |--------------------------------------------------------------------------
123
+    |
124
+    | Here you may change the name of the session cookie that is created by
125
+    | the framework. Typically, you should not need to change this value
126
+    | since doing so does not grant a meaningful security improvement.
127
+    |
128
+    */
129
+
130
+    'cookie' => env(
131
+        'SESSION_COOKIE',
132
+        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
133
+    ),
134
+
135
+    /*
136
+    |--------------------------------------------------------------------------
137
+    | Session Cookie Path
138
+    |--------------------------------------------------------------------------
139
+    |
140
+    | The session cookie path determines the path for which the cookie will
141
+    | be regarded as available. Typically, this will be the root path of
142
+    | your application, but you're free to change this when necessary.
143
+    |
144
+    */
145
+
146
+    'path' => env('SESSION_PATH', '/'),
147
+
148
+    /*
149
+    |--------------------------------------------------------------------------
150
+    | Session Cookie Domain
151
+    |--------------------------------------------------------------------------
152
+    |
153
+    | This value determines the domain and subdomains the session cookie is
154
+    | available to. By default, the cookie will be available to the root
155
+    | domain and all subdomains. Typically, this shouldn't be changed.
156
+    |
157
+    */
158
+
159
+    'domain' => env('SESSION_DOMAIN'),
160
+
161
+    /*
162
+    |--------------------------------------------------------------------------
163
+    | HTTPS Only Cookies
164
+    |--------------------------------------------------------------------------
165
+    |
166
+    | By setting this option to true, session cookies will only be sent back
167
+    | to the server if the browser has a HTTPS connection. This will keep
168
+    | the cookie from being sent to you when it can't be done securely.
169
+    |
170
+    */
171
+
172
+    'secure' => env('SESSION_SECURE_COOKIE'),
173
+
174
+    /*
175
+    |--------------------------------------------------------------------------
176
+    | HTTP Access Only
177
+    |--------------------------------------------------------------------------
178
+    |
179
+    | Setting this value to true will prevent JavaScript from accessing the
180
+    | value of the cookie and the cookie will only be accessible through
181
+    | the HTTP protocol. It's unlikely you should disable this option.
182
+    |
183
+    */
184
+
185
+    'http_only' => env('SESSION_HTTP_ONLY', true),
186
+
187
+    /*
188
+    |--------------------------------------------------------------------------
189
+    | Same-Site Cookies
190
+    |--------------------------------------------------------------------------
191
+    |
192
+    | This option determines how your cookies behave when cross-site requests
193
+    | take place, and can be used to mitigate CSRF attacks. By default, we
194
+    | will set this value to "lax" to permit secure cross-site requests.
195
+    |
196
+    | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
197
+    |
198
+    | Supported: "lax", "strict", "none", null
199
+    |
200
+    */
201
+
202
+    'same_site' => env('SESSION_SAME_SITE', 'lax'),
203
+
204
+    /*
205
+    |--------------------------------------------------------------------------
206
+    | Partitioned Cookies
207
+    |--------------------------------------------------------------------------
208
+    |
209
+    | Setting this value to true will tie the cookie to the top-level site for
210
+    | a cross-site context. Partitioned cookies are accepted by the browser
211
+    | when flagged "secure" and the Same-Site attribute is set to "none".
212
+    |
213
+    */
214
+
215
+    'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
216
+
217
+];

+ 1
- 0
database/.gitignore 查看文件

@@ -0,0 +1 @@
1
+*.sqlite*

+ 44
- 0
database/factories/UserFactory.php 查看文件

@@ -0,0 +1,44 @@
1
+<?php
2
+
3
+namespace Database\Factories;
4
+
5
+use Illuminate\Database\Eloquent\Factories\Factory;
6
+use Illuminate\Support\Facades\Hash;
7
+use Illuminate\Support\Str;
8
+
9
+/**
10
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
11
+ */
12
+class UserFactory extends Factory
13
+{
14
+    /**
15
+     * The current password being used by the factory.
16
+     */
17
+    protected static ?string $password;
18
+
19
+    /**
20
+     * Define the model's default state.
21
+     *
22
+     * @return array<string, mixed>
23
+     */
24
+    public function definition(): array
25
+    {
26
+        return [
27
+            'name' => fake()->name(),
28
+            'email' => fake()->unique()->safeEmail(),
29
+            'email_verified_at' => now(),
30
+            'password' => static::$password ??= Hash::make('password'),
31
+            'remember_token' => Str::random(10),
32
+        ];
33
+    }
34
+
35
+    /**
36
+     * Indicate that the model's email address should be unverified.
37
+     */
38
+    public function unverified(): static
39
+    {
40
+        return $this->state(fn (array $attributes) => [
41
+            'email_verified_at' => null,
42
+        ]);
43
+    }
44
+}

+ 49
- 0
database/migrations/0001_01_01_000000_create_users_table.php 查看文件

@@ -0,0 +1,49 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::create('users', function (Blueprint $table) {
15
+            $table->id();
16
+            $table->string('name');
17
+            $table->string('email')->unique();
18
+            $table->timestamp('email_verified_at')->nullable();
19
+            $table->string('password');
20
+            $table->rememberToken();
21
+            $table->timestamps();
22
+        });
23
+
24
+        Schema::create('password_reset_tokens', function (Blueprint $table) {
25
+            $table->string('email')->primary();
26
+            $table->string('token');
27
+            $table->timestamp('created_at')->nullable();
28
+        });
29
+
30
+        Schema::create('sessions', function (Blueprint $table) {
31
+            $table->string('id')->primary();
32
+            $table->foreignId('user_id')->nullable()->index();
33
+            $table->string('ip_address', 45)->nullable();
34
+            $table->text('user_agent')->nullable();
35
+            $table->longText('payload');
36
+            $table->integer('last_activity')->index();
37
+        });
38
+    }
39
+
40
+    /**
41
+     * Reverse the migrations.
42
+     */
43
+    public function down(): void
44
+    {
45
+        Schema::dropIfExists('users');
46
+        Schema::dropIfExists('password_reset_tokens');
47
+        Schema::dropIfExists('sessions');
48
+    }
49
+};

+ 35
- 0
database/migrations/0001_01_01_000001_create_cache_table.php 查看文件

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::create('cache', function (Blueprint $table) {
15
+            $table->string('key')->primary();
16
+            $table->mediumText('value');
17
+            $table->integer('expiration');
18
+        });
19
+
20
+        Schema::create('cache_locks', function (Blueprint $table) {
21
+            $table->string('key')->primary();
22
+            $table->string('owner');
23
+            $table->integer('expiration');
24
+        });
25
+    }
26
+
27
+    /**
28
+     * Reverse the migrations.
29
+     */
30
+    public function down(): void
31
+    {
32
+        Schema::dropIfExists('cache');
33
+        Schema::dropIfExists('cache_locks');
34
+    }
35
+};

+ 57
- 0
database/migrations/0001_01_01_000002_create_jobs_table.php 查看文件

@@ -0,0 +1,57 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::create('jobs', function (Blueprint $table) {
15
+            $table->id();
16
+            $table->string('queue')->index();
17
+            $table->longText('payload');
18
+            $table->unsignedTinyInteger('attempts');
19
+            $table->unsignedInteger('reserved_at')->nullable();
20
+            $table->unsignedInteger('available_at');
21
+            $table->unsignedInteger('created_at');
22
+        });
23
+
24
+        Schema::create('job_batches', function (Blueprint $table) {
25
+            $table->string('id')->primary();
26
+            $table->string('name');
27
+            $table->integer('total_jobs');
28
+            $table->integer('pending_jobs');
29
+            $table->integer('failed_jobs');
30
+            $table->longText('failed_job_ids');
31
+            $table->mediumText('options')->nullable();
32
+            $table->integer('cancelled_at')->nullable();
33
+            $table->integer('created_at');
34
+            $table->integer('finished_at')->nullable();
35
+        });
36
+
37
+        Schema::create('failed_jobs', function (Blueprint $table) {
38
+            $table->id();
39
+            $table->string('uuid')->unique();
40
+            $table->text('connection');
41
+            $table->text('queue');
42
+            $table->longText('payload');
43
+            $table->longText('exception');
44
+            $table->timestamp('failed_at')->useCurrent();
45
+        });
46
+    }
47
+
48
+    /**
49
+     * Reverse the migrations.
50
+     */
51
+    public function down(): void
52
+    {
53
+        Schema::dropIfExists('jobs');
54
+        Schema::dropIfExists('job_batches');
55
+        Schema::dropIfExists('failed_jobs');
56
+    }
57
+};

+ 23
- 0
database/seeders/DatabaseSeeder.php 查看文件

@@ -0,0 +1,23 @@
1
+<?php
2
+
3
+namespace Database\Seeders;
4
+
5
+use App\Models\User;
6
+// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
7
+use Illuminate\Database\Seeder;
8
+
9
+class DatabaseSeeder extends Seeder
10
+{
11
+    /**
12
+     * Seed the application's database.
13
+     */
14
+    public function run(): void
15
+    {
16
+        // User::factory(10)->create();
17
+
18
+        User::factory()->create([
19
+            'name' => 'Test User',
20
+            'email' => 'test@example.com',
21
+        ]);
22
+    }
23
+}

+ 17
- 0
package.json 查看文件

@@ -0,0 +1,17 @@
1
+{
2
+    "private": true,
3
+    "type": "module",
4
+    "scripts": {
5
+        "build": "vite build",
6
+        "dev": "vite"
7
+    },
8
+    "devDependencies": {
9
+        "autoprefixer": "^10.4.20",
10
+        "axios": "^1.7.4",
11
+        "concurrently": "^9.0.1",
12
+        "laravel-vite-plugin": "^1.2.0",
13
+        "postcss": "^8.4.47",
14
+        "tailwindcss": "^3.4.13",
15
+        "vite": "^6.0.11"
16
+    }
17
+}

+ 33
- 0
phpunit.xml 查看文件

@@ -0,0 +1,33 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
4
+         bootstrap="vendor/autoload.php"
5
+         colors="true"
6
+>
7
+    <testsuites>
8
+        <testsuite name="Unit">
9
+            <directory>tests/Unit</directory>
10
+        </testsuite>
11
+        <testsuite name="Feature">
12
+            <directory>tests/Feature</directory>
13
+        </testsuite>
14
+    </testsuites>
15
+    <source>
16
+        <include>
17
+            <directory>app</directory>
18
+        </include>
19
+    </source>
20
+    <php>
21
+        <env name="APP_ENV" value="testing"/>
22
+        <env name="APP_MAINTENANCE_DRIVER" value="file"/>
23
+        <env name="BCRYPT_ROUNDS" value="4"/>
24
+        <env name="CACHE_STORE" value="array"/>
25
+        <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
26
+        <!-- <env name="DB_DATABASE" value=":memory:"/> -->
27
+        <env name="MAIL_MAILER" value="array"/>
28
+        <env name="PULSE_ENABLED" value="false"/>
29
+        <env name="QUEUE_CONNECTION" value="sync"/>
30
+        <env name="SESSION_DRIVER" value="array"/>
31
+        <env name="TELESCOPE_ENABLED" value="false"/>
32
+    </php>
33
+</phpunit>

+ 6
- 0
postcss.config.js 查看文件

@@ -0,0 +1,6 @@
1
+export default {
2
+    plugins: {
3
+        tailwindcss: {},
4
+        autoprefixer: {},
5
+    },
6
+};

+ 25
- 0
public/.htaccess 查看文件

@@ -0,0 +1,25 @@
1
+<IfModule mod_rewrite.c>
2
+    <IfModule mod_negotiation.c>
3
+        Options -MultiViews -Indexes
4
+    </IfModule>
5
+
6
+    RewriteEngine On
7
+
8
+    # Handle Authorization Header
9
+    RewriteCond %{HTTP:Authorization} .
10
+    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11
+
12
+    # Handle X-XSRF-Token Header
13
+    RewriteCond %{HTTP:x-xsrf-token} .
14
+    RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
15
+
16
+    # Redirect Trailing Slashes If Not A Folder...
17
+    RewriteCond %{REQUEST_FILENAME} !-d
18
+    RewriteCond %{REQUEST_URI} (.+)/$
19
+    RewriteRule ^ %1 [L,R=301]
20
+
21
+    # Send Requests To Front Controller...
22
+    RewriteCond %{REQUEST_FILENAME} !-d
23
+    RewriteCond %{REQUEST_FILENAME} !-f
24
+    RewriteRule ^ index.php [L]
25
+</IfModule>

+ 0
- 0
public/favicon.ico 查看文件


+ 1
- 0
public/hot 查看文件

@@ -0,0 +1 @@
1
+http://[::1]:5173

+ 17
- 0
public/index.php 查看文件

@@ -0,0 +1,17 @@
1
+<?php
2
+
3
+use Illuminate\Http\Request;
4
+
5
+define('LARAVEL_START', microtime(true));
6
+
7
+// Determine if the application is in maintenance mode...
8
+if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
9
+    require $maintenance;
10
+}
11
+
12
+// Register the Composer autoloader...
13
+require __DIR__.'/../vendor/autoload.php';
14
+
15
+// Bootstrap Laravel and handle the request...
16
+(require_once __DIR__.'/../bootstrap/app.php')
17
+    ->handleRequest(Request::capture());

+ 2
- 0
public/robots.txt 查看文件

@@ -0,0 +1,2 @@
1
+User-agent: *
2
+Disallow:

+ 3
- 0
resources/css/app.css 查看文件

@@ -0,0 +1,3 @@
1
+@tailwind base;
2
+@tailwind components;
3
+@tailwind utilities;

+ 1
- 0
resources/js/app.js 查看文件

@@ -0,0 +1 @@
1
+import './bootstrap';

+ 4
- 0
resources/js/bootstrap.js 查看文件

@@ -0,0 +1,4 @@
1
+import axios from 'axios';
2
+window.axios = axios;
3
+
4
+window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

+ 3
- 0
resources/views/components/table.blade.php 查看文件

@@ -0,0 +1,3 @@
1
+<div>
2
+    <!-- It is quality rather than quantity that matters. - Lucius Annaeus Seneca -->
3
+</div>

+ 78
- 0
resources/views/home.blade.php 查看文件

@@ -0,0 +1,78 @@
1
+@extends('layouts.main')
2
+
3
+@section('content')
4
+    <div class="flex flex-col gap-4 bg-white rounded p-10 min-h-screen">
5
+
6
+        <!-- Pie Chart Card -->
7
+        <div class="rounded-md border border-[rgba(0,0,0,0.2)] p-4">
8
+            <h5 class="text-lg font-semibold mb-4">Senarai Agensi Mengikut Status</h5>
9
+            <div class="mx-auto text-center" style="width:25%">
10
+                <canvas id="agencyPieChart"></canvas>
11
+                <h5 class="font-bold my-5">Status</h5>
12
+            </div>
13
+        </div>
14
+
15
+        <!-- Table Card -->
16
+        <div class="rounded-md border border-[rgba(0,0,0,0.2)] p-4">
17
+            <h5 class="text-lg font-semibold mb-4">Rekod Penetapan KPI Pelaburan</h5>
18
+            <div class="overflow-x-auto">
19
+                <table class="w-full text-sm text-left text-gray-700 border-collapse">
20
+                    <thead class="bg-gray-100">
21
+                        <tr>
22
+                            <th class="px-4 py-2 border">Bil. </th>
23
+                            <th class="px-4 py-2 border">S-GLC</th>
24
+                            <th class="px-4 py-2 border">Sasaran Pelaburan 2025 (RM)</th>
25
+                            <th class="px-4 py-2 border">Penetapan Sasaran Pelaburan (RM) oleh YB Dato’ Pengerusi</th>
26
+                        </tr>
27
+                    </thead>
28
+                    <tbody>
29
+                        <tr>
30
+                            <td class="px-4 py-2 border">1</td>
31
+                            <td class="px-4 py-2 border">Agensi A</td>
32
+                            <td class="px-4 py-2 border text-green-600 font-medium">Aktif</td>
33
+                            <td class="px-4 py-2 border">75%</td>
34
+                        </tr>
35
+                        <tr>
36
+                            <td class="px-4 py-2 border">2</td>
37
+                            <td class="px-4 py-2 border">Agensi B</td>
38
+                            <td class="px-4 py-2 border text-yellow-600 font-medium">Dalam Proses</td>
39
+                            <td class="px-4 py-2 border">50%</td>
40
+                        </tr>
41
+                        <tr>
42
+                            <td class="px-4 py-2 border">3</td>
43
+                            <td class="px-4 py-2 border">Agensi C</td>
44
+                            <td class="px-4 py-2 border text-red-600 font-medium">Tidak Aktif</td>
45
+                            <td class="px-4 py-2 border">30%</td>
46
+                        </tr>
47
+                    </tbody>
48
+                </table>
49
+            </div>
50
+        </div>
51
+    </div>
52
+@endsection
53
+
54
+@section('scripts')
55
+    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
56
+    <script>
57
+        const ctx = document.getElementById('agencyPieChart').getContext('2d');
58
+
59
+        new Chart(ctx, {
60
+            type: 'pie',
61
+            data: {
62
+                labels: ['Aktif', 'Dalam Proses', 'Tidak Aktif'],
63
+                datasets: [{
64
+                    label: 'Status Agensi',
65
+                    data: [12, 8, 5],
66
+                    backgroundColor: ['#10B981', '#FBBF24', '#EF4444'],
67
+                    borderWidth: 1
68
+                }]
69
+            },
70
+            options: {
71
+                responsive: true,
72
+                plugins: {
73
+                    legend: false
74
+                }
75
+            }
76
+        });
77
+    </script>
78
+@endsection

+ 72
- 0
resources/views/layouts/main.blade.php 查看文件

@@ -0,0 +1,72 @@
1
+<!DOCTYPE html>
2
+<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
3
+<head>
4
+    <meta charset="utf-8">
5
+    <meta name="viewport" content="width=device-width, initial-scale=1">
6
+    <title>Dashboard</title>
7
+
8
+    <link rel="preconnect" href="https://fonts.bunny.net">
9
+    <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
10
+
11
+    @vite(['resources/css/app.css', 'resources/js/app.js'])
12
+    <script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
13
+
14
+</head>
15
+<body class="antialiased bg-gray-100 text-gray-800">
16
+
17
+<div x-data="{ sidebarOpen: true }" class="min-h-screen flex">
18
+
19
+    <!-- Sidebar -->
20
+    <div :class="sidebarOpen ? 'w-64' : 'w-16'" class="bg-white border-r border-gray-200 transition-all duration-300 flex flex-col">
21
+        <div class="p-4 flex justify-between items-center">
22
+            <span x-show="sidebarOpen" class="font-bold text-lg">Dashboard</span>
23
+            <button @click="sidebarOpen = !sidebarOpen" class="text-gray-600 focus:outline-none">
24
+                <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
25
+                    <path :class="sidebarOpen ? 'block' : 'hidden'" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
26
+                    <path :class="!sidebarOpen ? 'block' : 'hidden'" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
27
+                </svg>
28
+            </button>
29
+        </div>
30
+
31
+        <nav class="flex-1 px-2 space-y-2" x-show="sidebarOpen">
32
+
33
+            <!-- Dashboard -->
34
+            <a href="#" class="block px-4 py-2 rounded hover:bg-gray-200">
35
+                Dashboard
36
+            </a>
37
+
38
+            <!-- Projects (with children) -->
39
+            <div x-data="{ open: false }" class="space-y-1">
40
+                <button
41
+                    @click="open = !open"
42
+                    class="w-full flex justify-between items-center px-4 py-2 rounded hover:bg-gray-200 text-left"
43
+                >
44
+                    <span>Projects</span>
45
+                    <svg :class="{'rotate-90': open}" class="w-4 h-4 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
46
+                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
47
+                    </svg>
48
+                </button>
49
+                <div x-show="open" x-transition class="pl-6">
50
+                    <a href="#" class="block px-2 py-1 rounded hover:bg-gray-100">All Projects</a>
51
+                    <a href="#" class="block px-2 py-1 rounded hover:bg-gray-100">Create Project</a>
52
+                </div>
53
+            </div>
54
+
55
+            <!-- Settings -->
56
+            <a href="#" class="block px-4 py-2 rounded hover:bg-gray-200">
57
+                Settings
58
+            </a>
59
+
60
+        </nav>
61
+    </div>
62
+
63
+    <!-- Content -->
64
+    <div class="flex-1 p-6">
65
+        @yield('content')
66
+    </div>
67
+    @yield('scripts')
68
+
69
+</div>
70
+
71
+</body>
72
+</html>

+ 8
- 0
routes/console.php 查看文件

@@ -0,0 +1,8 @@
1
+<?php
2
+
3
+use Illuminate\Foundation\Inspiring;
4
+use Illuminate\Support\Facades\Artisan;
5
+
6
+Artisan::command('inspire', function () {
7
+    $this->comment(Inspiring::quote());
8
+})->purpose('Display an inspiring quote');

+ 7
- 0
routes/web.php 查看文件

@@ -0,0 +1,7 @@
1
+<?php
2
+
3
+use Illuminate\Support\Facades\Route;
4
+
5
+Route::get('/', function () {
6
+    return view('home');
7
+});

+ 4
- 0
storage/app/.gitignore 查看文件

@@ -0,0 +1,4 @@
1
+*
2
+!private/
3
+!public/
4
+!.gitignore

+ 2
- 0
storage/app/private/.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 2
- 0
storage/app/public/.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 9
- 0
storage/framework/.gitignore 查看文件

@@ -0,0 +1,9 @@
1
+compiled.php
2
+config.php
3
+down
4
+events.scanned.php
5
+maintenance.php
6
+routes.php
7
+routes.scanned.php
8
+schedule-*
9
+services.json

+ 2
- 0
storage/logs/.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 20
- 0
tailwind.config.js 查看文件

@@ -0,0 +1,20 @@
1
+import defaultTheme from 'tailwindcss/defaultTheme';
2
+
3
+/** @type {import('tailwindcss').Config} */
4
+export default {
5
+    content: [
6
+        './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
7
+        './storage/framework/views/*.php',
8
+        './resources/**/*.blade.php',
9
+        './resources/**/*.js',
10
+        './resources/**/*.vue',
11
+    ],
12
+    theme: {
13
+        extend: {
14
+            fontFamily: {
15
+                sans: ['Figtree', ...defaultTheme.fontFamily.sans],
16
+            },
17
+        },
18
+    },
19
+    plugins: [],
20
+};

+ 19
- 0
tests/Feature/ExampleTest.php 查看文件

@@ -0,0 +1,19 @@
1
+<?php
2
+
3
+namespace Tests\Feature;
4
+
5
+// use Illuminate\Foundation\Testing\RefreshDatabase;
6
+use Tests\TestCase;
7
+
8
+class ExampleTest extends TestCase
9
+{
10
+    /**
11
+     * A basic test example.
12
+     */
13
+    public function test_the_application_returns_a_successful_response(): void
14
+    {
15
+        $response = $this->get('/');
16
+
17
+        $response->assertStatus(200);
18
+    }
19
+}

+ 10
- 0
tests/TestCase.php 查看文件

@@ -0,0 +1,10 @@
1
+<?php
2
+
3
+namespace Tests;
4
+
5
+use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
6
+
7
+abstract class TestCase extends BaseTestCase
8
+{
9
+    //
10
+}

+ 16
- 0
tests/Unit/ExampleTest.php 查看文件

@@ -0,0 +1,16 @@
1
+<?php
2
+
3
+namespace Tests\Unit;
4
+
5
+use PHPUnit\Framework\TestCase;
6
+
7
+class ExampleTest extends TestCase
8
+{
9
+    /**
10
+     * A basic test example.
11
+     */
12
+    public function test_that_true_is_true(): void
13
+    {
14
+        $this->assertTrue(true);
15
+    }
16
+}

+ 11
- 0
vite.config.js 查看文件

@@ -0,0 +1,11 @@
1
+import { defineConfig } from 'vite';
2
+import laravel from 'laravel-vite-plugin';
3
+
4
+export default defineConfig({
5
+    plugins: [
6
+        laravel({
7
+            input: ['resources/css/app.css', 'resources/js/app.js'],
8
+            refresh: true,
9
+        }),
10
+    ],
11
+});

正在加载...
取消
保存