Миграцията има следният общ вид:
Повече за миграциите: https://laravel.com/docs/5.3/migrations
Модели
Моделите в Laravel, както при повечето рамки, използващи MVC шаблона, са обекти, с които се извличат и обработват данни. Особеното при тях е, че имплементират
шаблона ActiveRecord. Накратко, това означава, че атрибутите на модела се извличат директно от колоните на базата от данни т.е. ако в БД имате поле "name", то можете
да го достъпите със същото име в модела, без да се налага да го дефинирате изрично (по начина, познат ви от ООП). За повече информация може да потърсите ключовите
думи "ORM" и "ActiveRecord" в Google.
Моделите в Laravel се генерират от Artisan (подробности подолу) със следната команда:
... и имат следният общ вид:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
//Миграциите се създават автоматично чрез Artisan! Прочетете по‐долу.
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFlightsTable extends Migration
{
//Функцията up се изпълнява при изпълнение на миграцията.
//Тук се поставя кодът, с който дадена таблица ще се създава или променя.
public function up()
{
//Schema::create е функция за създаване на таблици. Приема като аргументи име на таблица и анонимна функция, описваща таблицата.
//Аргументът Blueprint $table на анонимната функция е абсолютно задължителен!
Schema::create('flights', function (Blueprint $table) {
$table‐>increments('id'); //целочислен атрибут, който се увеличава автоматично с единица при запис в БД. По подразбиране е и първичен ключ.
$table‐>string('name'); //Символен низ с дължина до 255 символа. За по‐дълги атрибути се използва text вместо string. Опционален втори параметър е дължина на низа.
$table‐>string('airline');
$table‐>timestamps(); //Служебни полета, показващи датата на създаването и последната промяна на модела.
});
}
//Функцията down се изпълнява при връщането на миграция.
//Тук обикновено се изтрива таблица, или се отменят промените по структурата
public function down()
{
//Schema::drop изтрива таблицата.
Schema::drop('flights');
//За промяна на структурата на таблицата отново се използва Schema::table, имаща същия формат както Schema::create;
//За изтриване на колона от таблицата, в анонимната функция се използва $table‐>dropColumn('име‐на‐колона‐за‐триене');
}
}
php artisan make:model ИмеНаМодел
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
//Моделите се създават автоматично чрез Artisan! Прочетете по‐долу.
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
//В променливата $table ЗАДЪЛЖИТЕЛНО се указва таблицата в БД, съответстваща на модела!
protected $table = 'my_flights';
//Атрибутите в $fillable могат да се променят. Ако атрибут не присъства тук, то той не може да бъде променян.
//Ако не сте сигурни, то тук сложете всички атрибути, без ID‐то на съответния модел.
protected $fillable = ['name','destination','seat_number'];
//Ако пък желаете обратният ефект, т.е. описаните полета да са недостъпни, а останалите достъпни, преименувайте $fillable на $guarded.
//Тези атрибути няма да се показват при сериализация на модела
//Добра практика е тук да присъстват полетата, съхраняващи парола или друга чувствителна информация.
protected $hidden = ['customer_id'];
//$timestamps трябва да е true, ако в миграцията сте задали $table‐>timestamps() и обратно ‐ false, ако не сте.
//В противен случай моделът ще дава грешка при всяко добавяне, промяна или извличане на информация
Повече за моделите в Laravel:
Ръководство за бърз старт https://laravel.com/docs/5.3/eloquent
Повече за връзките https://laravel.com/docs/5.3/eloquentrelationships
Изгледи
За изгледи в Laravel се използва шаблонното ядро Blade. Кодът, написан на Blade, се компилира до PHP код, но не ограничава разработчиците да използват единствено PHP
за своите шаблони. Обикновено Blade шаблоните са смесица между HTML и контролни структури на ядрото.
Някои предимства на Blade:
Лесен директен достъп до данни, подадени чрез контролера променлива се достъпва по следния начин: {{$variable}}
Възможност за фрагментиране на изгледите
Възможно е да има главен изглед и подчинени изгледи (пр.: header + footer и съдържание). Това позволява много бърза промяна на цялостния облик на сайта.
Възможно е и динамично включване на частичен изглед в друг изглед
Контролни структури if, for, foreach, forelse, while
Голямо бързодействие шаблоните се прекомпилират само при промяна.
Повече за изгледите в Laravel: https://laravel.com/docs/5.3/blade
Контролери
Контролерите са класове, служещи за организация на обслужването на заявките към приложението. Обработката е организирана в методи (като правило всеки метод
обработва един тип заявка), а връзката между методът, обработващ заявката и URL адресът, който я обслужва, се задава в рутера (подолу). Контролерите се създават чрез
Artisan и имат следният общ вид:
Контролерите могат да:
1. Валидират въведени потребителски данни
2. Връщат изглед на потребителя
3. Работят директно с модели (макар че работата с модели не е ограничена и в изгледите, ако се налага)
4. Пренасочват заявки към други методи в същия контролер, други контролери, както и външни приложения
Повече за контролерите: https://laravel.com/docs/5.3/controllers
Повече за валидация на данни: https://laravel.com/docs/5.3/validation
Пътища (routes) и рутер (router)
Внимание! Да не се бърка с мрежовото устройство рутер!
Пътищата указват съответствието между съответен URL адрес и метод в контролер. Рутерът е компонентът от Laravel, който се грижи за откриването на пътища за всяка
заявка.
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public $timestamps = true;
//Връзки
public function passengers(){
//Връзка от тип 1:M
//Полетът има много пътници, като в модела за пътник има атрибут 'flight_id', който съответства на атрибута 'id' от настоящия модел
return $this‐>hasMany('App\Passengers','flight_id','id');
//Връзка 1:1 е идентична, но вместо hasMany се използва hasOne
}
public function user(){
//Връзка от тип M:1
//Един потребител може да е създал много полети. Всеки полет има поле user_id, което съответства на полето id от модела User.
return $this‐>belongsTo('App\User','user_id','id');
//belongsTo се използва и при връзки 1:1
}
//Връзка от типа M:M няма да бъде разглеждана в настоящия пример.
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//Контролерите се генерират автоматично с Artisan!
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
//Метод, отговарящ за показването на потребител
public function show($id)
{
//Показване на изглед с определена информация
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
Като цяло, пътищата могат да се разделят на два вида:
непараметризирани
параметризирани
където id е задължителен параметър. Незадължителен параметър се задава с поставянето на въпросителен знак преди затварящата фигурна скоба.
Заявките, които могат да бъдат подавани към рутера, се делят на два основни вида (макар че има и повече):
GET заявка за получаване на съдържание. Обикновено такава заявка се прави при зареждане на страница, последване на линк и др.
POST изпращане на съдържание към сървъра. Обикновено се използва при изпращане (submit) на формуляри. Може да съдържа много повече полезни данни от GET.
Пътищата се задават във файл routes/web.php или app/routes.php, в зависимост от версията на Laravel, по следния начин:
Този файл е основната достъпна от рутера за разработчика част.
Вижда се, че може да се генерират пътища както за GET, така и за POST заявки (дори и за един и същ URL, като може да се специфицират различни методи според типа на
заявката). Първият аргумент указва URL адреса, а вторият контролерът и методът, във формат контролер@метод. Ако в URLa има параметри, то те ще бъдат предадени
към контролера, като, за да ги използва, методът трябва да приема аргументи със същите имена (т.е. ако има параметър {id}, то методът трябва да приема аргумент $id).
Повече за рутера и пътищата: https://laravel.com/docs/5.3/routing
Artisan
Artisan e командният интерфейс на Laravel. Позволява изпълнението на редица полезни команди, които биха могли да са в помощ на разработчика по време на изграждането
на приложението. Това може да включва:
създаване на нови елементи (модели, контролери, миграции и др.)
изпълнение на миграции и работа с БД
помощна информация за пътища (routes)
изпълнение на служебни команди
тестване на компоненти от приложението
Artisan се използва чрез съответният команден интерпретатор за операционната система. Под Windows може да се използва Command Prompt, както и вграденият в PhpStorm
терминал.
Artisan командите имат следният общ вид:
Например:
ще предизвика извеждането на всички команди, с които разполага Artisan.
Към всяка команда в Artisan има и помощна информация, която може да бъде извикана чрез:
Някои почесто използвани Artisan команди
За създаване на нов елемент:
Например, за създаване на нов контролер:
За изпълнение на миграции:
За връщане на последно изпълнените миграции:
ВНИМАНИЕ!!! Освен структурата, тази команда изтрива и данните, въведени след последните миграции!
За връщане на всички миграции (еквивалентно на пълно изчистване на БД):
/articles
/articles/view/{id}
Route::get('/articles/create','ArticleController@showCreate')‐>name('showCreate');
Route::post('/articles/create','ArticleController@create')‐>name('create'); //post пътищата обработват формуляри
Командният терминал в PhpStorm може да бъде достъпен от меню View > Tool Windows > Terminal или чрез клавишната комбинация Alt + F12.
php artisan <команда>
php artisan list
php artisan help <команда>
php artisan make:<controller|model|migration|middleware|...> ИмеНаЕлемента
php artisan make:controller MyNewController
php artisan migrate
php artisan migrate:rollback
php artisan migrate:reset
ВНИМАНИЕ!!! Тази команда напълно изтрива всичко, съдържащо се в БД!
Задачи
1. Първи стъпки с Laravel Създаване на нов Laravel проект в PhpStorm.
Указания:
1. Стартирайте средата PhpStorm. Изберете Create New Project от стартовия екран. Ако не виждате стартовия екран, изберете File > New Project.
2. Изберете Composer Project за тип на проекта.
3. За location използвайте C:\xampp\htdocs\MyProject. Може да замените MyProject с предпочитано от вас име на проекта.
4. Изберете пакет с име laravel/laravel в категория Package. В Path то PHP Executable напишете php.exe Екранът трябва да изглежда така:
5. Средата автоматично ще изтегли Laravel и ще създаде проекта. Това отнема много време около 10 мин (в някои случаи и повече)! Бъдете търпеливи.
6. При успешно създаване на проекта ще видите следният екран:
2. Създаване на празна БД и свързване с Laravel.
Указания:
1. Отворете предпочитаният от Вас браузър (Chrome или IE) и въведете: http://localhost/phpmyadmin
2. Изберете бутон БД
3. В секция Създаване на БД въведете my_laravel_project или предпочитано от вас име. За колацияЗАДЪЛЖИТЕЛНО изберете utf8_general_ci.
4. Върнете се в PhpStorm и отворете файла с име .env от Project Explorer (лявата част на прозореца). Заменете съдържанието му с:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
APP_ENV=local
APP_KEY=base64:x4wLLBBS7vavBRH+S58qUldfA/9M547X8N5lIj/C5hM=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=my_laravel_project
DB_USERNAME=root
DB_PASSWORD=''
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
0 коментара
За да коментирате, трябва да сте влезли в профила си.
Влезте