Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#26 Re: Laravel 5.x » Разные контроллеры по одному маршруту » 29.06.2017 07:31:04

Непонятна задача. Зачем такие сложности. Указываете один контроллер для профиля, а в нем уже определяете всю логику - проверяете роль и выводите соответствующую вьюху.

#27 Re: Laravel 5.x » Отладка запросов » 28.06.2017 08:18:17

События БД

Ещё есть удобный пакет barryvdh/laravel-debugbar. Он показывает sql и для ajax запросов.

#29 Re: Laravel 5.x » Blade, отрисовать (получить Html разметку) только одну секцию » 23.06.2017 21:50:43

@Proger_XP Я тоже загружаю отрендеренную на сервере форму, но только при первичной загрузке. У меня все модальные диалоги редактирования грузятся с сервера. Даже при добавлении новой записи я гружу пустой диалог с сервера. Но я не понимаю, зачем гнать целый диалог с сервера при ошибке валидации, когда пользователь внес некорректные данные и нажал кнопку Сохранить. Достаточно вернуть сообщение об ошибке. В общем, я никого не уговариваю. Нравится такой подход, ради бога. Мне проще передать просто ошибку и её отрисовать, чем перерисовывать весь диалог и переинициализировать плагины полей.

#30 Re: Laravel 5.x » Blade, отрисовать (получить Html разметку) только одну секцию » 23.06.2017 18:05:05

@Proger_XP, судя по всему вы вообще не поняли о чём я писал.

// Мой вариант
if (ошибка) {
   return response()->json([...]); // или просто return ['errormsg'=>'Ошибка'];
}
// Вариант топикстартера
if (ошибка) {
   $html = view('name', $data)->render(); // Тут теряем время
   return $html;
}

В случае с пересылкой - пересылается не форма или обычная страница, а маленький json.

Парсить ответ нужно в случае, если приходит страница - на ней нужно найти блок с контентом ($(response).find('div.content')) и только потом его вставить в DOM.

А откуда div’то возьмется?

Изначально есть в форме. См. пост. Просто нужно добавить ему идентификатор или класс. Хотя не обязательно.

#31 Re: Laravel 5.x » Blade, отрисовать (получить Html разметку) только одну секцию » 23.06.2017 17:40:52

Proger_XP пишет:

GTX прав, вместо того чтобы держать логику отрисовки и код шаблона сразу на двух сторонах (PHP/JS) лучше на стороне сервера отдавать по AJAX сразу тот же HTML, который генерируется и при обычном запросе, только без обёртки для целой страницы. Нормальная практика.

Дело в том, что в варианте GTX javascript кода будет не меньше и он будет сложнее:
1. Рендер формы на сервере.
2. Форму нужно переслать на клиент.
3. Нужно распарсить ответ.
4. Всунуть форму в DOM.
Возможные проблемы описал constb.

Мой вариант:
1. Гоним JSON с ошибками на клиент.
2. Вставить сообщение об ошибке в DOM (div id="error").

В итоге не теряем на рендере, на пересылке кода формы (существенно для мобильных) и на распарсивании кода. И если на поля навешаны JS плагины типа bootstrap mask, datetime, select2 и т.п., не надо заново их инициализировать.

#32 Re: Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 14:49:46

ну вы смотрите шире на вещи) У вас допустим в один тур поедет 1001 турист:)

Как в анекдоте: "Пошлём X танков... Нет, икс мало. Пошлём Y  танков". smile
Я-то представлял себе, что в тур едет, например, семья. Ну группа друзей. А тут оказывается 1 человек покупает тур сразу для 2 жд составов туристов или 6 самолётов или хз сколько автобусов. А если уж представить, что он оплачивает тур для 100500 миллионов туристов, то счет пойдёт на тысячи серверов. smile
Удачи!

#33 Re: Laravel 5.x » Blade, отрисовать (получить Html разметку) только одну секцию » 23.06.2017 13:15:50

Не надо ничего на сервере отрисовывать. Нужно отправить ответ в виде JSON с описанием ошибки, а в JS его поймать и вставить в нужное место.

if (ошибка) {
   return response()->json(["success" => false, "message" => "Ошибся маленько!"]);
}

#34 Re: Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 13:08:49

Ну если вы в одном поле нашли повторяющуюся информацию и считаете, что вместо него лучше создать таблицу buyers с 3 полями, которая практически полностью копирует таблицу tour_tourist, то мы с вами любим разные математики и я уж точно вам не помощник. smile

П.С. А ещё часто в таблицу статей добавляют поле deleted, в котором 1 значит "удалена", но в нём почти всегда нули. Это поле тоже может поломать математическое восприятие мира smile)

#35 Re: Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 12:41:10

Тогда можно добавить только одно поле - tourist_type:
0 - турист (значит едет)
1 - покупатель (тоже едет)
2 - спонсор (купил, но не едет)

#36 Re: Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 12:33:36

Можно в той же контировочной (pivot) таблице tour_tourist и добавить нужные поля (для лучшей семантики лучше добавить 2 поля - is_tourist и is_buyer, потому как если buyer едет (=1), то его невозможно отличить от других туристов).
В итоге получается всего 3 таблицы - туры, туристы и расширенная pivot таблица.

#37 Re: Laravel 5.x » Не могу получить список из БД » 22.06.2017 08:35:31

Возможно что-то где-то упустил. Может в модели User не определён метод tasks(), может пользователь не залогинен ($request->user() пустой). Поможет поэтапная отладка. С этой стороны монитора сложно что-то понять не видя кода.

#38 Re: Laravel 5.x » Не вызывается handle события » 21.06.2017 16:42:00

Вы плохо понимаете работу с событиями. Метод handle() используется у обработчика события (listener), а не у события. Класс события - это некий контейнер данных. А запускается обработчик. Для этого нужно его зарегистрировать. Так что начните с документации. Я по событиям написал пару статей, можете также глянуть.

#39 Re: Laravel 5.x » Laravel 5.4.27 CORS » 20.06.2017 22:20:03

2)Comment::where('id', '=', 1)->post;

Дело в том, что метод where() возвращает объект Eloquent\Builder, а динамическое свойство post описано в классе модели. Поэтому надо вернуть модель. Сделать это можно как в первом пункте или так

Comment::where('id', '=', 1)->first()->post

3)Comment::find(1)->post();

post() со скобками опять же возвращает не Post, а объект отношения, с возможностью дальнейшего построения запроса, как в предыдущем пункте, т.е.

3)Comment::find(1)->post()->where(...)->first();

По поводу связей очень пригодится жадная загрузка

#40 Re: Laravel 5.x » Как получить id модели, которая создаётся? » 20.06.2017 08:33:33

С формальной точки зрения вопрос был именно про id. У моделей, как правило, первичный ключ - это автоинкрементное поле.

#42 Re: Laravel 5.x » Внесение данных в БД » 18.06.2017 08:30:12

Нужно добавить столбец owner в массив $fillable. В вашем случае owner не пишется в базу, а так как он NOT NULL, то mySql ругается.

#43 Re: Laravel 5.x » Не получается обновить форму через put method » 15.06.2017 08:36:11

На js всё можно сделать гораздо проще.

$('#editFilmForm').on('submit', function (e) {
        e.preventDefault();
        var url = '/films/' + $('[name="filmId"]').val(),
             data = $(this).serializeArray();

        $.post(url, data, function($response) {
              console.log(response);
        });
});

#44 Re: Laravel 5.x » Пост обработка шаблона » 04.05.2017 15:36:47

Самый простой вариант, который приходит в голову - это во вьюхе определить плейсхолдер, а затем передавать его через функцию view().

// view
...
<link rel="stylesheet" type="text/css" href="styles/app.css?{{ $ver or ''}}" />
...

// Route
return view('pages/view', ['ver' => $date]); // $date - это дата редактирования файла.

П.С. Имя файла вьюхи можно получить так view('pages/view')->getPath().

#45 Re: Laravel 5.x » Ошибка синтаксиса в темплейте » 21.04.2017 07:39:05

{{ count($shippingClassesList) > 1 ? 'Rows ' : 'Row' }}

Ещё вариант trans_choice()

#46 Re: Laravel 5.x » Элементы интерфейса в laravel » 28.02.2017 14:05:27

Как вариант

<select>
@foreach(DB::table('items')->get() as $item)
    <option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>

#47 Re: Laravel 5.x » Уместен ли такой вариант в роутах ? » 19.02.2017 09:14:06

chirik пишет:

Вопрос насколько уместен такой вариант? Он работает.

Laravel даёт большую свободу выбора способа реализации. Такой вполне допустим. Кашерен ли, другой вопрос.

Небольшая шлифовка - логику убрать в контроллер:

Route::get('/', 'HomeController@check');

А в методе check() уже делать проверку.

#48 Re: Laravel 5.x » Как разделить view auth для админки и сайта » 16.02.2017 23:06:42

Как вариант...
Также решал такую задачу. Вот решение.
Роут для админки

Route::group(['prefix' => 'admin', 'middleware' => ['web']], function () {
    Route::get('', ['as' => 'dashboard', function () {
        if (Auth::check()) {
            return view('admin.dashboard'); // админка
        } else {
            return view('auth.adminlogin'); // форма логина с роутами для админки
        }
    }]);
    Route::post('login', 'Auth\AdminLoginController@login')->name('admin.login');
    Route::post('logout', 'Auth\AdminLoginController@logout')->name('admin.logout');

    // Остальные роуты с middleware - auth
    ...
});

AdminLoginController наследуется от LoginController

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;

class AdminLoginController extends LoginController
{
    // После логина редиректит в админку
    public function redirectTo()
    {
        return 'admin';
    }
    // После логаута админа редиректит на страницу админки с формой аутентификации
    public function logout(Request $request)
    {
        $this->guard()->logout();
        $request->session()->flush();
        $request->session()->regenerate();
        return redirect('admin');
    }
}

Теперь, если пользователь логинится на сайте, он на сайте и остаётся после логина и логаута. А если зашел в админку, то на этой и входит и выходит.

Возможно есть кашернее решение. С ларавел знаком всего 3 месяца.

#50 Laravel 5.x » Аутентификация по имени в laravel 5.3 » 16.02.2017 18:03:54

Sergant210
Ответов: 2

Всем привет!
С версии 5.3 убрали возможность указать поле для авторизации. В версии 5.2 можно было в LoginController указать свойство

$this->username = 'username';

и юзер логинился по имени пользователя.
Теперь сделали авторизацию жестко по email.
Подскажите, эту возможность совсем убрали или изменили механизм?

Подвал раздела