yakoffka.ru
    грабли, костыли и велосипеды php, css, html, js и прочего

    Справка по laravel

    laravel

    Капустин Яков

    оглавление

    Создание миграции 'create_projects_table' с помощью artisan:

    bash:
    vagrant@homestead:~/projects/scratch$ php artisan make:migration create_projects_table Created Migration: 2019_02_08_235353_create_projects_table vagrant@homestead:~/projects/scratch$

    В результате выполнения команды создаётся файл database/migrations/2019_02_08_235353_create_projects_table.php, описывающий класс CreateProjectsTable, создающий или удаляющий (при выполнении методов up/down) таблицу projects.

    Для взаимодействия с создаваемой указанной выше миграцией таблицей создадим модель:

    bash:
    vagrant@homestead:~/projects/scratch$ php artisan make:model Project Model created successfully. vagrant@homestead:~/projects/scratch$

    В результате выполнения команды создаётся файл app/Project.php, описывающий класс CreateProjectsTable, наследующий класс Model.

    Homestead/Homestead.yaml:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12

      
    <?php

      
    namespace App;

      use 
    Illuminate\Database\Eloquent\Model;

      class 
    Project extends Model
      
    {
        
    //
      
    }
      

    Воспользуемся ключами и создадим модель Task вместе с контроллером, фабрикой и файлом миграции:

    bash:
    vagrant@homestead:~/projects/scratch$ php artisan make:model Task -m -f -c Model created successfully. Factory created successfully. Created Migration: 2019_02_17_200558_create_tasks_table Controller created successfully. vagrant@homestead:~/projects/scratch$

    В результате выполнения команды создаётся файл app/Project.php, описывающий класс CreateProjectsTable, наследующий класс Model.

    Homestead/Homestead.yaml:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12

      
    <?php

      
    namespace App;

      use 
    Illuminate\Database\Eloquent\Model;

      class 
    Project extends Model
      
    {
        
    //
      
    }
      

    При создании контроллера необходимо указать его имя вида 'NametablesController':

    bash:
    vagrant@homestead:~/projects/scratch$ php artisan make:controller ProjectsController Controller created successfully. vagrant@homestead:~/projects/scratch$

    В результате выполнения команды создаётся файл app/Http/Controllers/ProjectsController.php, описывающий класс ProjectsController, наследующий класс Controller.

    app/Http/Controllers/ProjectsController.php:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12

      
    <?php

      
    namespace App\Http\Controllers;

      use 
    Illuminate\Http\Request;

      class 
    ProjectsController extends Controller
      
    {
        
    //
      
    }
      

    Если при создании контроллера воспользоваться ключами, то можно создать одной командой контроллер с предварительно объявленными методами и модель для него:

    bash:
    vagrant@homestead:~/projects/scratch$ php artisan make:controller ProjectsController -r -m Project A App\Project model does not exist. Do you want to generate it? (yes/no) [yes]: > Model created successfully. Controller created successfully. vagrant@homestead:~/projects/scratch$

    В результате выполнения команды создаётся файл app/Http/Controllers/ProjectsController.php, описывающий класс ProjectsController, наследующий класс Controller с типичными методами (index, create, show, edit, update и destroy) и модель Project. В файле также будет импортирован класс создаваемой модели: 'use App\Project;'.

    app/Http/Controllers/ProjectsController.php:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88

      
    <?php

      
    namespace App\Http\Controllers;

      use 
    App\Project;
      use 
    Illuminate\Http\Request;

      class 
    ProjectsController extends Controller
      
    {
        
    /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
         */
        
    public function index()
        {
          
    //
        
    }

        
    /**
         * Show the form for creating a new resource.
         *
         * @return \Illuminate\Http\Response
         */
        
    public function create()
        {
          
    //
        
    }

        
    /**
         * Store a newly created resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        
    public function store(Request $request)
        {
          
    //
        
    }

        
    /**
         * Display the specified resource.
         *
         * @param  \App\Project  $project
         * @return \Illuminate\Http\Response
         */
        
    public function show(Project $project)
        {
          
    //
        
    }

        
    /**
         * Show the form for editing the specified resource.
         *
         * @param  \App\Project  $project
         * @return \Illuminate\Http\Response
         */
        
    public function edit(Project $project)
        {
          
    //
        
    }

        
    /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \App\Project  $project
         * @return \Illuminate\Http\Response
         */
        
    public function update(Request $requestProject $project)
        {
          
    //
        
    }

        
    /**
         * Remove the specified resource from storage.
         *
         * @param  \App\Project  $project
         * @return \Illuminate\Http\Response
         */
        
    public function destroy(Project $project)
        {
          
    //
        
    }
      }

      

    Роут указывает приложению на необходимость вызова определенного метода определённого контроллера (передаются во втором аргументе) при совпадении строки запроса со строкой, указанной в первом аргументе а также типа запроса.

    routes/web.php:
    1
    2
    3
    4
    5

      
    ...
      
    Route::get('/projects''ProjectsController@index');
      ...
      
    bash:
    vagrant@homestead:~/projects/scratch$ php artisan route:list +--------+----------+----------+------+-----------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+----------+------+-----------------------------------------------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | projects | | App\Http\Controllers\ProjectsController@index | web | +--------+----------+----------+------+-----------------------------------------------+--------------+ vagrant@homestead:~/projects/scratch$

    Альтернативный способ объявления с созданием типичных роутов:

    routes/web.php:
    1
    2
    3
    4
    5
    6

      
    ...
      
    // Route::get('/projects', 'ProjectsController@index');
      
    Route::resource('projects''ProjectsController');
      ...
      
    bash:
    vagrant@homestead:~/projects/scratch$ php artisan route:list +--------+-----------+-------------------------+------------------+-------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+-------------------------+------------------+-------------------------------------------------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | projects | projects.index | App\Http\Controllers\ProjectsController@index | web | | | POST | projects | projects.store | App\Http\Controllers\ProjectsController@store | web | | | GET|HEAD | projects/create | projects.create | App\Http\Controllers\ProjectsController@create | web | | | GET|HEAD | projects/{project} | projects.show | App\Http\Controllers\ProjectsController@show | web | | | PUT|PATCH | projects/{project} | projects.update | App\Http\Controllers\ProjectsController@update | web | | | DELETE | projects/{project} | projects.destroy | App\Http\Controllers\ProjectsController@destroy | web | | | GET|HEAD | projects/{project}/edit | projects.edit | App\Http\Controllers\ProjectsController@edit | web | +--------+-----------+-------------------------+------------------+-------------------------------------------------+--------------+ vagrant@homestead:~/projects/scratch$

    За вывод полученных данных отвечает уровень отображения, файлы которого хранятся в директории resources/view. Наименования файлов обычно формируются из имени_таблицы/имени_метода.blade.php.

    Передача скрытых полей для защиты от CSRF-атаки и передачи метода. Ниже представлены равноценные способы:

    resources/views/projects/*.blade.php:
    1
    2
    3
    4
    5
    6
    7

      
    ...
      <
    form>
        {{ 
    csrf_field() }}
        {{ 
    method_field('DELETE') }}
      ...
      
    resources/views/projects/*.blade.php:
    1
    2
    3
    4
    5
    6
    7

      
    ...
      <
    form>
        @
    csrf
        
    @method('DELETE')
      ...
      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2

      

    .

    code
    bash:
    Homestead/Homestead.yaml:
    1
    2