Класс
Request - абстракция отправляемого запроса
пользователя.
Создадим
страницу контактов.
Откроем
routes\web.php
Route::match(['get',
'post'], '/contact', ['uses'=>'Admin\ContactController@show',
'as'=>'contact']);
Создадим
контроллер:
app\Http\Controllers\Admin\ContactController.php
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ContactController extends Controller
{
public function show() {
return view('default.contact', ['title'=>'Contacts']);
}
}
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ContactController extends Controller
{
public function show() {
return view('default.contact', ['title'=>'Contacts']);
}
}
Создадим вид
в resources\views\default\contact.blade.php
@extends('default.layouts.layout')
@section('content')
<div
class="col-md-9">
<pre>
{{
print_r(Session::all()) }}
</pre>
<div
class="">
<h2>Contact
us!</h2>
</div>
<p>
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.
</p>
<form
method="post" action="{{ route('contact') }}">
{{
csrf_field() }}
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control"
id="name" name="name" value="{{ old('name')
}}" placeholder="Jane Doe">
</div>
<div class="form-group">
<label for="email">Email address</label>
<input type="email" class="form-control"
id="email" value="{{ old('email') }}"
name="email" placeholder="Email">
</div>
<div class="form-group">
<label for="site">Site</label>
<input type="text" class="form-control"
id="site" value="{{ old('site') }}" name="site"
placeholder="Site">
</div>
<div class="form-group">
<label for="text">Text</label>
<textarea class="form-control" id="text"
name="text" rows="3">{{ old('text')
}}</textarea>
</div>
<button type="submit" class="btn
btn-primary">Submit</button>
</form>
</div>
@endsection
Откроем
public\index.php
Обработка
запроса пользователя:
$response
= $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$request = Illuminate\Http\Request::capture()
);
Здесь описаны
все методы
\vendor\laravel\framework\src\Illuminate\Http\Request.php
В
контроллере в качестве параметра
передается объект запроса пользователя.
Переменная
$request — это объект класса Request.
public
function show(Request $request) {
print_r($request->all());
return view('default.contact', ['title'=>'Contacts']);
}
print_r($request->all());
return view('default.contact', ['title'=>'Contacts']);
}
Идем
на страницу http://tlaravel.loc/contact
Заполняем
контактную форму.
Смотрим
исходный код страницы и получаем массив:
Array
(
[_token] => liFmiRNwyC0z3t6StjPfOSqVrm2jNroQzUfi4739
[name] => aaa
[email] => cosmetici@mail.ru
[site] => http://tlaravel.loc/contact
[text] => dddd
)
Формирование
и получение доступа к объекту Request можно
вынести в конструктор контроллера.
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ContactController extends Controller
{
protected $request;
public function __construct(Request $request) {
$this->request = $request;
}
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ContactController extends Controller
{
protected $request;
public function __construct(Request $request) {
$this->request = $request;
}
//
В метод show не
передаем параметром Request $request
public function show() {
print_r($this->request->all());
return view('default.contact', ['title'=>'Contacts']);
}
}
public function show() {
print_r($this->request->all());
return view('default.contact', ['title'=>'Contacts']);
}
}
Допустим, в
маршруте передаются параметры:
Например,
id? Знак ? Говорит о том,
что этот параметр необязательный.
Route::match(['get',
'post'], '/contact/{id?}', ['uses'=>'Admin\ContactController@show',
'as'=>'contact']);
В
app\Http\Controllers\Admin\ContactController.php , точнее в
метод обработчик будут передаваться
все параметры.
public
function show(Request $request, $id=FALSE) {
print_r($request->all());
echo '<h1>'.$id.'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
print_r($request->all());
echo '<h1>'.$id.'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
Если
мы обратимся: http://tlaravel.loc/contact/69
У
нас выведется: 69
Метод
input() позволяет получить отдельно доступ
к каждой ячейке массива.
Получим доступ
к ячейке name:
public
function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->input('name').'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
echo '<h1 style="margin-top:100px">'.$request->input('name').'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
В
качестве второго аргумента для input
мы можем передать значение по
умолчанию.
public
function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->input('name', 'Default').'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
}
echo '<h1 style="margin-top:100px">'.$request->input('name', 'Default').'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
}
Метод
has() объекта request возвращает истину,
если ячейка, которая передается в
качестве первого параметра присутствует
в массиве передаваемых данных в запросе
и при этом значение данной ячейки не
пустое.
Если
ячейка с именем заполнена, то у нас
выведется имя этой ячейки:
public
function show(Request $request, $id=FALSE) {
print_r($request->all());
if($request->has('name')) {
echo '<h1 style="margin-top:100px">'.$request->input('name', 'Default').'</h1>';
}
return view('default.contact', ['title'=>'Contacts']);
}
}
print_r($request->all());
if($request->has('name')) {
echo '<h1 style="margin-top:100px">'.$request->input('name', 'Default').'</h1>';
}
return view('default.contact', ['title'=>'Contacts']);
}
}
Метод only()
позволяет
указать какие именно параметры запроса
вас интересуют.
Получим
доступ к ячейкам имя и сайт:
public
function show(Request $request, $id=FALSE) {
$array = $request->only('name', 'site');
print_r($array);
return view('default.contact', ['title'=>'Contacts']);
}
$array = $request->only('name', 'site');
print_r($array);
return view('default.contact', ['title'=>'Contacts']);
}
Метод except()
позволяет
указать те ячейки, которые нас не
интересуют.
public
function show(Request $request, $id=FALSE) {
$array = $request->except('name', 'site');
print_r($array);
return view('default.contact', ['title'=>'Contacts']);
}
$array = $request->except('name', 'site');
print_r($array);
return view('default.contact', ['title'=>'Contacts']);
}
И
в методе only(), и в
except() мы можем передать
массив: except(['name', 'site']);
Доступ
к интересующим ячейкам массива с
передаваемыми данными в запросе, можно
получить, используя свойства
объекта Request.
public
function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->name.'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
echo '<h1 style="margin-top:100px">'.$request->name.'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
Если
мы используем параметр для запроса name,
который укажем в маршруте и данный
параметр укажем в запросе, то значение
для параметра name будет записано в
свойства объекта Request.
Пример:
Route::match(['get',
'post'], '/contact/{name?}',
['uses'=>'Admin\ContactController@show', 'as'=>'contact']);
Если
наберем http://tlaravel.loc/contact/Admin
То
у нас выведется Admin
В
шаблоне напишем:
<form
method="post" action="{{ route('contact',
array('name'=>'hello')) }}">
Заполним
форму и у нас отобразится имя из формы.
Так
происходит, потому что Laravel
для записи свойств объекта Request
использует данные, передаваемые
в запросе, а если их нет, то обращается
к параметрам запроса.
Методы для
работы с адресной строкой
Метод
path() -
возвращает часть URI и
в данной части содержится запрос.
public function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->path().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
echo '<h1 style="margin-top:100px">'.$request->path().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
В
браузере наберем: http://tlaravel.loc/contact/hello
Выводится:
contact/hello
Метод
is() - проверяет
соответствие адреса с определенным
шаблоном, который передается в качестве
первого параметра. Возвращает истину,
если запрос совпадает с шаблоном.
Проверим
соответствует ли запрос шаблону:
public
function show(Request $request, $id=FALSE) {
if($request->is('contact/*')) {
echo '<h1 style="margin-top:100px">'.$request->path().'</h1>';
}
return view('default.contact', ['title'=>'Contacts']);
}
if($request->is('contact/*')) {
echo '<h1 style="margin-top:100px">'.$request->path().'</h1>';
}
return view('default.contact', ['title'=>'Contacts']);
}
В
браузере наберем: http://tlaravel.loc/contact/hello
Выводится:
contact/hello
Если
набрать: http://tlaravel.loc/contact
То
в браузере ничего не выводится.
Метод
url() возвращает путь, который находится
в адресной строке, но без get-параметров.
public function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->url().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
echo '<h1 style="margin-top:100px">'.$request->url().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
Если
набрать: http://tlaravel.loc/contact
Выводится:
http://tlaravel.loc/contact
Если
нужен полный url, то
используем метод fullurl().
public
function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->fullurl().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
}
echo '<h1 style="margin-top:100px">'.$request->fullurl().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
}
Если
набрать: http://tlaravel.loc/contact?option=t
Выводится:
http://tlaravel.loc/contact?option=t
Работа с разными
типами запросов.
Чтобы
узнать какой тип запроса использует
пользователь применяется метод method().
public
function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->method().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
echo '<h1 style="margin-top:100px">'.$request->method().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
Если
набрать: http://tlaravel.loc/contact?option=t
Выводится:
GET
Если
мы отправляем форму, то выводится POST.
Метод isMethod()
позволяет
узнать какой метод использует пользователь.
Если
пользователь использует метод post,
то отобразим
на экране имя данного метода:
public
function show(Request $request, $id=FALSE) {
if($request->isMethod('post')) {
echo '<h1 style="margin-top:100px">'.$request->method().'</h1>';
}
return view('default.contact', ['title'=>'Contacts']);
}
if($request->isMethod('post')) {
echo '<h1 style="margin-top:100px">'.$request->method().'</h1>';
}
return view('default.contact', ['title'=>'Contacts']);
}
Формируем
механизм по обработке данных.
СЕССИИ.
В
файле \app\Http\Kernel.php необходимо подключить
сессии.
Находим
в группе web строку:
\Illuminate\Session\Middleware\StartSession::class,
и
подключаем ее в массив со свойствами
$middleware.
protected
$middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Illuminate\Session\Middleware\StartSession::class,
// \App\Http\Middleware\Mymiddleware::class
];
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Illuminate\Session\Middleware\StartSession::class,
// \App\Http\Middleware\Mymiddleware::class
];
Для
каждого маршрута будет открываться
сессия. Данные будут сохранятся в сессию.
Получим доступ
к данным из сессии с помощью метода
flash().
Откроем
шаблон contact.blade.php и
вернем всю информацию из сессии:
<pre>
{{ print_r(Session::all()) }}
</pre>
В
ContactController.php
public
function show(Request $request, $id=FALSE) {
if($request->isMethod('post')) {
$request->flash();
}
return view('default.contact', ['title'=>'Contacts']);
}
if($request->isMethod('post')) {
$request->flash();
}
return view('default.contact', ['title'=>'Contacts']);
}
Заполним
и отправим форму:
Array
(
[_token] => oHak3FA4u7WFcYWMk8bVb4wa6pY7trbOqEhEvqeq
[_previous] => Array
(
[url] => http://tlaravel.loc/contact?option=t
)
[_flash] => Array
(
[old] => Array
(
)
[new] => Array
(
[0] => _old_input
)
)
[_old_input] => Array
(
[_token] => oHak3FA4u7WFcYWMk8bVb4wa6pY7trbOqEhEvqeq
[name] => Jane
[email] => cosmetici@mail.ru
[site] => g.ru
[text] => Text
)
)
1
token – ключ для безопасности
сайта.
В
шаблон в форму в каждый value добавим
old:
<form
method="post" action="{{ route('contact',
array('name'=>'hello')) }}">
{{ csrf_field() }}
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control"
id="name" name="name" value="{{ old('name')
}}" placeholder="Jane Doe">
</div>
<div class="form-group">
<label for="email">Email address</label>
<input type="email" class="form-control"
id="email" value="{{ old('email') }}"
name="email" placeholder="Email">
</div>
<div class="form-group">
<label for="site">Site</label>
<input type="text" class="form-control"
id="site" value="{{ old('site') }}"
name="site" placeholder="Site">
</div>
<div class="form-group">
<label for="text">Text</label>
<textarea class="form-control" id="text"
name="text" rows="3">{{ old('text')
}}</textarea>
</div>
<button type="submit" class="btn
btn-primary">Submit</button>
</form>
old
возвращает данные, хранящиеся
в сессии. В форму добавляются данные,
указанные в предыдущем сеансе.
Flash()
добавляет все данные.
Метод
flashOnly() позволяет
перечислить только нужные ячейки.
public function show(Request $request, $id=FALSE)
{
if($request->isMethod('post')) {
$request->flashOnly('name', 'site');
}
return view('default.contact', ['title'=>'Contacts']);
}
if($request->isMethod('post')) {
$request->flashOnly('name', 'site');
}
return view('default.contact', ['title'=>'Contacts']);
}
Метод
flashExcept() позволяет
указать, какие ячейки нас не интересуют.
public
function show(Request $request, $id=FALSE) {
if($request->isMethod('post')) {
$request->flashExcept('name', 'site');
}
return view('default.contact', ['title'=>'Contacts']);
}
if($request->isMethod('post')) {
$request->flashExcept('name', 'site');
}
return view('default.contact', ['title'=>'Contacts']);
}
Возвращает:
[_old_input] => Array
(
[_token] => oHak3FA4u7WFcYWMk8bVb4wa6pY7trbOqEhEvqeq
[email] => dd@d.g
[text] => vvvv
)
Записав
информацию в сессию, мы можем вызвать
redirect()
public
function show(Request $request, $id=FALSE) {
if($request->isMethod('post')) {
$request->flashExcept('name', 'site');
return redirect()->route('contact');
}
return view('default.contact', ['title'=>'Contacts']);
}
if($request->isMethod('post')) {
$request->flashExcept('name', 'site');
return redirect()->route('contact');
}
return view('default.contact', ['title'=>'Contacts']);
}
Редирект
обнуляет данные запроса.
Еще один метод
сохранения данных в сессию — это метод
withInput()
public
function show(Request $request, $id=FALSE) {
if($request->isMethod('post')) {
return redirect()->route('contact')->withInput();
}
return view('default.contact', ['title'=>'Contacts']);
}
if($request->isMethod('post')) {
return redirect()->route('contact')->withInput();
}
return view('default.contact', ['title'=>'Contacts']);
}
Метод
root() возвращает домен
сайта.
public
function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->root().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
echo '<h1 style="margin-top:100px">'.$request->root().'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
При
обращении: http://tlaravel.loc/contact
Выводит:
http://tlaravel.loc
Метод
exists() возвращает истину, если в массиве
передаваемых в запросе данных присутствует
ячейка, имя которой передается в качестве
первого параметра.
Метод
query() возвращает определенный параметр
из передаваемый get-параметров.
Если
вызывается query() без параметров, то
возвращается массив со всех передаваемых
get-параметров.
public
function show(Request $request, $id=FALSE) {
echo '<h1 style="margin-top:100px">'.$request->query('option').'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
echo '<h1 style="margin-top:100px">'.$request->query('option').'</h1>';
return view('default.contact', ['title'=>'Contacts']);
}
При
обращении: http://tlaravel.loc/contact?option=hello
Выводит:
hello
Метод
header() возвращает в виде массива
отправленные вместе с запросом заголовки.
public
function show(Request $request, $id=FALSE) {
print_r($request->header());
return view('default.contact', ['title'=>'Contacts']);
}
print_r($request->header());
return view('default.contact', ['title'=>'Contacts']);
}
Метод
server() возвращает массив аналогичный
массиву $_SERVER.
public
function show(Request $request, $id=FALSE) {
print_r($request->server());
return view('default.contact', ['title'=>'Contacts']);
}
print_r($request->server());
return view('default.contact', ['title'=>'Contacts']);
}
Метод
segments() возвращает в виде массива те
сегменты, на которые будет разделен
запрос без учета домена.
public
function show(Request $request, $id=FALSE) {
print_r($request->segments());
return view('default.contact', ['title'=>'Contacts']);
}
print_r($request->segments());
return view('default.contact', ['title'=>'Contacts']);
}
При
обращении: http://tlaravel.loc/contact?option=hello
( [0] => contact )
Метод flush() очищает
данные, которые были записаны в сессию.
public
function show(Request $request, $id=FALSE) {
$request->flash();
$request->flush();
return view('default.contact', ['title'=>'Contacts']);
}
$request->flash();
$request->flush();
return view('default.contact', ['title'=>'Contacts']);
}
Метод
old() возвращает ранее
сохраненные в сессию данные.
public
function show(Request $request, $id=FALSE) {
$request->flash();
$request->old('name');
return view('default.contact', ['title'=>'Contacts']);
}
$request->flash();
$request->old('name');
return view('default.contact', ['title'=>'Contacts']);
}
Комментариев нет:
Отправить комментарий