Роутер. Если нужно разом задать пути и связать их с контроллером, о можно использовать ресурсный контроллер. Для примера взьмем такой, из существующего проекта:
Route::resource('/order', 'Orders\OrdersController');
Благодаря этому рутеру, мы получим набор маршрутов:
Набор маршрутов, с соответствующим запуском методов в контроллере.
View. Шаблонизатор Blade:
@extends(‘layouts.app’) — подключение(наследование) шаблона, в данном случае шаблон: resources/view/layouts/app.blade.php
@section(‘content’) <!— HTML блок —> @endsection — создание блока ‘content ‘, для того что бы этот блок кода подключить, используется @yield(‘content’), в том участке, в котором необходимо вставить этот компонент.
Конструкция @forelse @endforelse:
@forelse ($orders as $order)
// если $orders не NULL
@forelse ($products as $product)
// если $orders NULL, а $products не NULL
@empty
// если $orders NULL и $products NULL
@endforelse
Конструкция @foreach @endforeach
@foreach ($order->partner as $partner)
<input type="text" class="form-control" name="name" placeholder="Заголовок категории" value="{{ $partner->name }}">
@endforeach
Конструкция @if @endif
@if ($order->status == 0)
Новый
@elseif ($order->status == 10)
Подтвержден
@elseif ($order->status == 20)
Завершен
@else
Статус не определен.
@endif
Создание ссылки в шаблоне:
<a href="{{route('order.edit', $order->id)}}" target="_blank">{!! $order->id !!}</a>
{{route(‘order.edit’, $order->id)}} — создается ссылка вида order/{order}/edit, где в {order} передается $order->id, и запустится метод ‘edit’ в контроллере ‘ Orders\OrdersController’. Маршруты можно посмотреть, введя команду ‘php artisan route:list’.
Так же можно создать именованый маршрут, т.е. маршрут, которому можно присвоить любое, на Ваше усмотрение, имя. Создаем роутер:
Route::get('/myorders', 'Orders\OrdersController@index')->name('myorders');
Теперь можно создать ссылку в шаблоне:
<a href="{{route('myorders')}}" target="_blank">Именованый маршрут myorders</a>
Следует упомянуть, что именованым маршрут является, т.к. задано имя маршрута в методе name(‘myorders’)
Для вывода переменных массивов или объектов, в шаблоне, используется конструкции такого вида:
{!! $wheather['temp'] !!} - выводим массив
{{ $product->price }} - вывод свойств объекта
{{ $order->products($order->id) }} - запуск метода модели, и передача аргумента
Контроллер.
Пример некотороых методов контроллера:
<?php
namespace App\Http\Controllers\Orders;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Orders\Order;
use App\Models\Partners\Partner;
use DB;
class OrdersController extends Controller
{
public function index()
{
return view('orders', [
'orders' => Order::orderBy('created_at', 'desc')->paginate(10),
'partners' => Partner::all()->pluck('name', 'id'),
]);
}
public function edit($id)
{
return view('order', [
'id' => $id,
'order' => Order::find($id),
'delimiter' => ''
]);
}
public function update(Request $request, Order $order)
{
$order->update($request->all());
DB::update('update partners set name = ? where id = ?', [$request->name, $request->partner_id]);
return redirect()->route('order.index');
}
}
Модель.
Пример модели:
<?php
namespace App\Models\Orders;
use Illuminate\Database\Eloquent\Model;
use App\Models\Order_products\Order_products;
use App\Models\Partners\Partner;
class Order extends Model
{
protected $fillable = ['id','status','client_email', 'partner_id',
'delivery_dt', 'created_at', 'updated_at'];
public function partner()
{
return $this->hasMany(Partner::class, 'id', 'partner_id');
}
public function products($order_id)
{
return self::join('order_products','orders.id', '=', 'order_products.order_id')
->join('products', 'order_products.product_id', '=', 'products.id')
->where('orders.id', $order_id)
->get();
}
}
Метод partner():
public function partner()
{
return $this->hasMany(Partner::class, 'id', 'partner_id');
}
Создает запрос вида:
select *
from
`partners`
where
`partners`.`id` = `orders`.`partner_id`
and
`partners`.`id` is not null
Т.о. можно создавать связь между таблицами.
Метод products():
public function products($order_id)
{
return self::join('order_products','orders.id', '=',
'order_products.order_id')
->join('products', 'order_products.product_id', '=', 'products.id')
->where('orders.id', $order_id)
->get();
}
Создаст запрос вида:
select *
from
`orders`
inner join
`order_products`
on
`orders`.`id` = `order_products`.`order_id`
inner join
`products`
on
`order_products`.`product_id` = `products`.`idx`
where
`orders`.`id` = $order_id(переданый в аргумент order_id)
Т.о. можно создать более сложную связь, таблицы ‘orders’ с таблицей ‘products’, через таблицу ‘order_products’.
Для быстрого создания модели и контроллера, можно использовать команду:
php artisan make:controller MessagesController --model=Messages
Команда создает контроллер «MessagesController» и модель «Messages»