Advertisement
deyanivanov966

Упражнение Подобрения. 16.12.2021 (инструкции)

Feb 21st, 2022
814
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.10 KB | None | 0 0
  1. Стъпка 0. Подготовка
  2.  
  3. Използваме подход “Learning by Doing”.
  4.  
  5.  
  6. Архивираме проекта с цел да възстановим данните, ако се наложи.
  7.  
  8.  
  9. Стартираме Apache & MySQL & cmd
  10.  
  11. Ако XAMPP е инсталиран на D:, то първо сменяме устройството, а после директорията:
  12.  
  13. D:
  14.  
  15. cd \xampp\htdocs\laravel8
  16.  
  17. PATH=%PATH%;C:\xampp\php
  18.  
  19. PATH=%PATH%;D:\xampp\php
  20.  
  21.  
  22. Подобряване на приложението
  23.  
  24. Използваме проекта от предходното упражнение.
  25.  
  26.  
  27. Подобрение 1. Потвърждение при изтриване на запис
  28.  
  29. Къде трябва да се направи промяна? В M?, в V? или в C?
  30.  
  31. <form action="{{ route('games.destroy', $game->id)}}" method="post" onsubmit="return confirm('The record will be deleted');">
  32.  
  33.  
  34. Подобрение 2. Ще добавим ново поле във формата за качване на картинка - качване на файл.
  35.  
  36. Стъпка 1. Промяна на миграционните файлове
  37. Отваряме
  38.  
  39. C:\xampp\htdocs\laravel8\database\migrations\2021_11_NN_NNNNN_create_games_table.php
  40.  
  41. Добавяне на ново поле към структурата на таблицата games от БД:
  42.  
  43. public function up()
  44.  
  45. {
  46.  
  47.         Schema::create('games', function (Blueprint $table) {
  48.  
  49.             $table->id();
  50.  
  51. ...
  52.  
  53.             $table->string('file_name')->nullable();
  54.  
  55.             $table->timestamps();
  56.  
  57.         });
  58.  
  59. }
  60.  
  61. php artisan migrate:refresh --path=/database/migrations/2021_11_NN_NNNNN_create_games_table.php
  62.  
  63. Така ще се изтрие и създаде само 1 таблица - games, без да се изтрива/създава users.
  64.  
  65. Стъпка 2. Промяна на уеб формата за нов запис - добавяне на възможност за избор на файл
  66. Отваряме:
  67.  
  68. C:\xampp\htdocs\laravel8\resources\views\create.blade.php
  69.  
  70. Променяме:
  71.  
  72. <form method="post" action="{{ route('games.store') }}">
  73.  
  74. Добавяме:
  75.  
  76. <form method="post" action="{{ route('games.store') }}" enctype="multipart/form-data">
  77.  
  78. Добавяме:
  79.  
  80.           <div class="form-group">
  81.  
  82.               <label for="picture">Picture :</label>
  83.  
  84.               <input type="file" class="form-control" name="picture"/>
  85.  
  86.           </div>                
  87.  
  88.           <button type="submit" class="btn btn-primary">Add Game</button>
  89.  
  90.       </form>
  91.  
  92.  
  93. Стъпка 3. Създаване на директория, където ще се записват файловете. Промяна на модела и контролера.
  94. Създаваме директория за качените файлове:
  95.  
  96. mkdir \xampp\htdocs\laravel8\public\pics
  97.  
  98.  
  99. Отваряме
  100.  
  101. \xampp\htdocs\laravel8\app\Models\Game.php
  102.  
  103. Добавяме:
  104.  
  105. // Game.php
  106.  
  107. namespace App\Models;
  108.  
  109. use Illuminate\Database\Eloquent\Factories\HasFactory;
  110.  
  111. use Illuminate\Database\Eloquent\Model;
  112.  
  113. class Game extends Model
  114.  
  115. {
  116.  
  117.     use HasFactory;
  118.  
  119.     protected $fillable = ['name', 'price', 'file_name'];
  120.  
  121. }
  122.  
  123.  
  124. Отваряме файл:
  125.  
  126. \xampp\htdocs\laravel8\app\Http\Controllers\GameController.php
  127.  
  128. Добавяме:
  129.  
  130. public function store(Request $request)
  131.  
  132. {
  133.  
  134.        if($request->hasFile('picture')) {
  135.  
  136.           $fileName = time() . '.' . $request->picture->getClientOriginalExtension();
  137.  
  138.           $request->picture->move(public_path('pics'), $fileName);
  139.  
  140.           $request->merge([ 'file_name' => $fileName ]);
  141.  
  142.        }
  143.  
  144.  
  145.         $validatedData = $request->validate([
  146.  
  147. ...
  148.  
  149.             'file_name' => 'nullable',
  150.  
  151.         ]);
  152.  
  153.  
  154.  
  155.  }
  156.  
  157. Стъпка 4. Промяна на изгледа
  158. Отваряме:
  159.  
  160. \xampp\htdocs\laravel8\resources\views\index.blade.php
  161.  
  162. Добавяме:
  163.  
  164.         @foreach($games as $game)
  165.  
  166. ...
  167.  
  168.             <td>{{$game->id}} <img src="./pics/{{$game->file_name}}" width="50"></td>
  169.  
  170. ...
  171.  
  172.  
  173.  
  174.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement