пятница, 23 июня 2017 г.

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

В routes/web.php


Создаем маршрут на отображение отдельной статьи в браузере.
Article — постоянная часть.
Параметр — переменная или динамическая часть, которая указывается в {}, т.е id.
Например, article/1
Метод show будет обрабатывать из IndexController.

Route::get('article/{id}', 'IndexController@show');

Для данного маршрута мы присвоим псевдоним, используя метод, name. Псевдоним дает право обращаться к определенному маршруту. Это нужно для создания ссылки на маршрут.

Route::get('article/{id}', 'IndexController@show')->name('articleShow');

Перейдем в \resources\views\page.blade.php
Найдем ссылку для перенаправления на страницу с конкретной статьей.

<p><a class="btn btn-default" href="{{ route('articleShow', ['id' => $article->id]) }}" role="button">Подробнее &raquo;</a></p>

Пример: $url = route('routeName', ['id' => 1]);

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

You may also call the find method with an array of primary keys, which will return a collection of the matching records:
$flights = App\Flight::find([1, 2, 3]);

Simple Where Clauses
You may use the where method on a query builder instance to add where clauses to the query. The most basic call to where requires three arguments. The first argument is the name of the column. The second argument is an operator, which can be any of the database's supported operators. Finally, the third argument is the value to evaluate against the column.
For example, here is a query that verifies the value of the "votes" column is equal to 100:
$users = DB::table('users')->where('votes', '=', 100)->get();

first() - the first method returns the first element in the collection that passes a given truth test.
Возвращает одну запись.

Немного видоизменим метод. Вынесем в конструктор заголовок и сообщение.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

class IndexController extends Controller
{

// объявим закрытые свойства
protected $message;
protected $header;

// создадим конструктор, который будет вызываться при создании объекта класса

public function __construct() {
$this->header = 'Hello world!';
$this->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.';
}

public function index() {

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

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


return view('page')->with(['message' => $this->message, // теперь мы испоьлзуем не переменные, а свойства
'header' => $this->header,
'articles' => $articles
]);
}


public function show($id) {
// dump($id); // будет выводится id конкретной статьи

// $article = Article::find($id); // обращаемся к модели Article
$article = Article::select(['id', 'title', 'text'])->where('id', $id)->first(); // WHERE id = $id
// dump($article);

return view('article-content')->with(['message' => $this->message, // теперь мы испоьлзуем не переменные, а свойства
'header' => $this->header,
'article' => $article
]);
}
}


В папке видов \resources\views создаем файл article-content.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">
@if($article)
<div>
<h2>{{ $article->title }}</h2>
<p>{!! $article->text !!}</p> <!-- {!! отключают теги -->
</div>
@endif()

<hr>

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

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

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

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

Materialize-css. Футер

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