четверг, 22 июня 2017 г.

Миникурс по Laravel. Урок 3.

Используемые функции:
all() делает выборку всех полей, возвращает объект класса collection.
select() позволяет указать выбираемые поля.
dump() распечатывает массивы и объекты


Выведем статьи из БД. Создадим модель.

Модели располагаются в корне каталога app
Модель именуется в единственном числе, исходя из имени таблицы, которая формируется во множественном числе.

Консоль:
cd domains\minilaravel.loc
php artisan make:model Article

Созданного функционала модели достаточно:
namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
//
}

Идем в App\Http\Controllers\Index.Controller.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

// пропишем доступ к моделе Articles
use App\Article;

class IndexController extends Controller
{
public function index() {
$header = 'Hello world!';
$message = 'This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.';

// $articles = Article::all(); // all() делает выборку всех полей, возвращает объект класса collection
// каждая запись представляет объект класса соответствующей модели

$articles = Article::select(['id', 'title', 'desc'])->get(); // select позволяет указать выбираемые поля
//dump($articles); // dump() распечатывает массивы и объекты


return view('page')->with(['message' => $message,
'header' => $header,
'articles' => $articles
]);
}

}

Это результат распечатки dump($articles);
Collection {#174 ▼
#items: array:3 [▼
0 => Article {#175 ▶}
1 => Article {#176 ▼
#connection: "mysql"
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:8 [▶]
#original: array:8 [▶]
#casts: []
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
#guarded: array:1 [▶]
}
2 => Article {#177 ▶}
]
}

Здесь нас интересует свойство #attributes: array:8 [▶]
#attributes: array:8 [▼
"id" => 2
"title" => "Nice & Clean. The best for your blog!\r\n"
"text" => "<p>Fusce rutrum lectus id nibh ullamcorper aliquet. Pellentesque pretium mauris et augue fringilla non bibendum turpis iaculis. Donec sit amet nunc lorem. Sed f ▶"
"desc" => "<p>Fusce rutrum lectus id nibh ullamcorper aliquet. Pellentesque pretium mauris et augue fringilla non bibendum turpis iaculis. Donec sit amet nunc lorem. Sed f ▶"
"alias" => "article-2"
"img" => "{"mini":"001-55x55.png ","max":"001-816x282.png ","path":"0081-700x345.jpg"}\r\n"
"keywords" => ""
"meta_desc" => ""
]

Далее идем в вид \resources\views\ page.blade.php
@foreach() - это директива в шаблонизаторе blade


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">

<title>Jumbotron Template for Bootstrap</title>

<link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('css/jumbotron.css') }}" rel="stylesheet">

</head>

<body>

<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">Project name</a>
</div>
<ul id="navbar" class="menu">
<li><a href="https://laravel.com/docs">Documentation</a></li>
<li><a href="https://laracasts.com">Laracasts</a></li>
<li><a href="https://laravel-news.com">News</a></li>
<li><a href="https://forge.laravel.com">Forge</a></li>
<li><a href="https://github.com/laravel/laravel">GitHub</a></li>
</ul><!--/.navbar-collapse -->
</div>
</nav>

<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
<div class="container">
<h1>{{$header}}</h1>
<p>{{$message}}</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
</div>
</div>

<div class="container">
<!-- Example row of columns -->
<div class="row">
@foreach($articles as $article)
<div class="col-md-4">
<h2>{{ $article->title }}</h2>
<p>{!! $article->desc !!}</p> <!-- {!! отключают теги -->
<p><a class="btn btn-default" href="#" role="button">Подробнее &raquo;</a></p>
</div>
@endforeach

<hr>

<footer>
<p>&copy; 2016 Company, Inc.</p>
</footer>
</div> <!-- /container -->

</body>
</html>

Создадим макет.
Для этого создадим папку layouts по адресу \resources\views\layouts
И в ней файл site.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">

<title>Jumbotron Template for Bootstrap</title>

<link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('css/jumbotron.css') }}" rel="stylesheet">

</head>

<body>

<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">Project name</a>
</div>
<ul id="navbar" class="menu">
<li><a href="https://laravel.com/docs">Documentation</a></li>
<li><a href="https://laracasts.com">Laracasts</a></li>
<li><a href="https://laravel-news.com">News</a></li>
<li><a href="https://forge.laravel.com">Forge</a></li>
<li><a href="https://github.com/laravel/laravel">GitHub</a></li>
</ul><!--/.navbar-collapse -->
</div>
</nav>

@yield('content') <!-- будет подгружаться из page.blade.php-->
</div> <!-- /container -->

</body>
</html>

В page.blade.php
@extends('layouts.site') <!-- Наследует шаблон. Пишем через точку. -->
@section('content') <!-- директива секции контента -->
<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
<div class="container">
<h1>{{$header}}</h1>
<p>{{$message}}</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
</div>
</div>

<div class="container">
<!-- Example row of columns -->
<div class="row">
@foreach($articles as $article)
<div class="col-md-4">
<h2>{{ $article->title }}</h2>
<p>{!! $article->desc !!}</p> <!-- {!! отключают теги -->
<p><a class="btn btn-default" href="#" role="button">Подробнее &raquo;</a></p>
</div>
@endforeach

<hr>

<footer>
<p>&copy; 2016 Company, Inc.</p>
</footer>

@endsection <!-- закрываем директиву секции контента -->

Комментариев нет:

Отправить комментарий

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html