Laravel по-русски

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

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

#51 Re: Laravel 5.x » Request и GET запрос » 27.02.2016 06:09:48

Я же написал — два способа:

if (is_int($request->id)) {} или if (is_int($request->route(’id’))) {}

Первый способ — это magic property, второй более «точный»

Только получается что проверять то и не надо — маршрутизатор уже проверил ☺ Можно проверить — существующий ли ID, есть ли доступ на него и тд

#52 Re: Laravel 5.x » Request и GET запрос » 27.02.2016 02:41:18

Так и думал — у Вас же ID в URL, не в параметрах.

Входные параметры (массив $request->all()) по определению — это GET/POST параметры (то что идет после? в адресе).

Параметр, замаскированный в URL — это не параметр GET, строго говоря.

Laravel такие значения вставляет в объект $request (что Вы уже и так нашли), еще они доступны как $request->route(’id’).

Валидировать можно в методе authorize() в созданном классе запроса. Можно сделать проверку is_int(), можно проверить есть ли права у юзера.

’required’ — бессмысленно проверять, раз юзер сюда попал по маршруту — значит ID указан. Иначе бы не сработал маршрут ☺

#53 Re: Laravel 5.x » Миграция. Изменить таблицу » 27.02.2016 02:36:35

Не надо подключать никакой сторонний класс. Просто добавить change() в цепочку.

#54 Re: Laravel 5.x » Request и GET запрос » 26.02.2016 11:40:39

Покажите route? Каким образом ID передается — как query параметр, или как часть URL?

Валидировать самый простой способ — сделать кастомный запрос php artisan make:request, заменить Request $request на этот новый класс, а там внутри класса Вам Laravel создаст метод rules() — там будут правила для валидатора

#55 Re: Laravel 5.x » Миграция. Изменить таблицу » 26.02.2016 02:08:30

Изменения можно и нужно делать миграциями — изменения делаются через —>change() как Вы сами себе ответили.

Добавить — просто имя колонки указать, удалить — dropColumn, переименовать — renameColumn.

Надо стараться DB не использовать вообще

#56 Re: Laravel 5.x » Как проверить, задана ли секция? » 25.02.2016 01:12:17

Сам не пробовал, но говорят, что можно:

@if (array_key_exists(’section’, app(’view’)->getSections()))
либо через фасад:

@if (array_key_exists(’section’, View::getSections()));

#57 Re: Laravel 5.x » Неявный контроллер » 24.02.2016 15:31:36

Или каждый маршрут или один RESTful ресурс (Route::resource).

Идея основная в том, что файл routes.php должен служить некоей документацией — программист открывает этот файл и примерно понимает, что приложение умеет делать, где что искать. Implicit контроллеры делали зло — они прятали от программиста часть информации ради небольшого сохранения времени.

#58 Re: Laravel 5.x » Наследование модели User. Как сделать правильно? » 24.02.2016 15:28:39

Вам наверное лучше роли, а не модели использовать для этого? Есть готовый package: https://github.com/Zizaco/entrust

Если пользователь реально один и тот же, просто права разные — было бы неправильным с точки зрения архитектуры плодить Active Record модели (Eloquent). Раз юзер один — модель должна быть одна, возможности у нее разные.

Почему вы не хотите просто в модель User добавить методы вроде isZavsklad()? (это если не использовать настоящие роли)

И вообще, судя по описанию вам тут подходит decorator pattern? Реализовать zavsklad/manager как два отдельных не-Eloquent класса, а потом в них wrap’ить оригинальный класс User.

#59 Re: Laravel 5.x » Неявный контроллер » 24.02.2016 15:18:56

Да, можно — public function getUsers($id) {}

Но использование неявных контроллеров 1) не рекомендуется 2) скоро будет убрано из Laravel.

Лучше уже сейчас переставать ими пользоваться — чтобы потом ничего не переписывать

#60 Re: Laravel 5.x » Привязка записи к id пользователя через форму. » 24.02.2016 12:13:23

Максимально близкий к оригиналу:

PHP
public function store()
{
        
Post::create([
             
'title' => Input::get('title'),
             
'slug' => Input::get('slug'),
             
'user_id' => Auth::user()->id,
             
'content' => Input::get('content')
        ]);

        return 
redirect()->route('post.index');
}

1) Особого смысла в параметрах указывать Post $postModel нет, оно просто делает new Post.
2) В реальности лучше сделать свой класс запроса (php artisan make:request), где будут проверятся все поля типа title, slug и тд. Тогда можно будет вообще создавать одной строкой: Post::create($request->all());

#61 Re: Laravel 5.x » Привязка записи к id пользователя через форму. » 24.02.2016 11:14:50

Я надеюсь Вы не в контроллере такой метод создали?

Метод store() в Laravel — это метод в контроллерах для POST запросов в парадигме RESTful (сохранение нового ресурса)

column_id — очень неподходящее название колонки для ID юзера. Лучше ’user_id’

#62 Re: Laravel 5.x » Получение данных для виджета » 24.02.2016 05:53:12

Чаты модно делать через websockets, Pusher, Node.js и так далее. Это должно быть на стороне юзера — в JavaScript.

Где-то пример интеграции с Laravel даже есть — вроде на Laracasts

Каждый контроллер отвечает за один конкретный ресурс. Если во все добавить чат — это будет нарушением правил ООП

#63 Re: Laravel 5.x » Events » 24.02.2016 05:51:34

Конечно объявляется – $this->app->singleton(’events’) объявляет $app[’events’]

Метод $app->singleton() регистрирует singleton-модуль (класс) внутри приложения

#64 Re: Laravel 5.x » Применение миграций без потери данных. » 23.02.2016 13:59:38

Надо сделать новую миграцию, а не редактировать старую. Либо сделать рефреш всех миграций — тогда это заново запустится (php artisan migrate:refresh --seed)

В принципе, в демо (staging) среде можно просто редактировать оригинальную миграцию и рефрешить. Когда проект будет в production — даже такую мелочь надо будет отдельной миграцией делать со Schema::table(). Метод down() тоже важен — не забывайте откат указывать.

php artisan make:migration add_levelneed_column --table=charCategories

В database/migrations/ появился файл с add_levelneed_column в имени, в нем делаем:

PHP
    public function up()
    {
        
Schema::table('charCategories', function (Blueprint $table) {
            
$table->integer('levelNeed')->default('0');
        });
    }

    public function 
down()
    {
        
Schema::table('charCategories', function (Blueprint $table) {
            
$table->dropColumn('levelNeed');
        });
    }

#65 Re: Laravel 5.x » Включить PHP Debug Bar только для определенных IP » 23.02.2016 02:42:55

Вообще, по умолчанию Debugbar влючается только если в окружении стоит APP_DEBUG = true, а такое значение - обычно только в staging среде.

Зачем Вам ограничивать работу debugbar по IP на staging сервере? На такой сервер обычно ходит только сам конкретный разработчик.

Если Вы хотите на production сервере запускать debugbar для конкретных IP - можете \Debugbar::enable(); для этого использовать, где-нибудь в routes.php скажем.

app.php точно нельзя трогать - это просто конфиг, там логики не должно быть такой

#66 Re: Laravel 5.x » Events » 22.02.2016 06:56:09

Этот модуль регистрируется тут:
vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php

Что в свою очередь вызывается тут:
vendor/laravel/framework/src/Illuminate/Foundation/Application.php

#67 Re: Laravel 5.x » Несколько параметров в роутинге » 22.02.2016 06:43:05

У вас во втором regexp неэкранированный минус стоит - это означет диапазон всегда. В данном случае от _ до / - такого диапазона не бывает

Попробуйте поставить \ перед -

#68 Re: Laravel 5.x » Новый формат маршрутов в laravel » 22.02.2016 06:37:47

L_E_L_I_K пишет:

Создает совсем пустой контроллер, уже не подготавливает "стандартные" методы типа "index", "destroy" и пр. А просто создает файл и класс, даже без индексного. Не думаю, что это критично, но все же решил поделиться.

И да, старый метод все-таки работает на новом, я прошу прощения.

Он по дефолту просто не создает эти RESTful методы. Там надо параметр добавить - и он их создаст

#69 Re: Laravel 5.x » Контракты » 22.02.2016 06:36:25

potMaster пишет:

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

Вот вот!

Это в английском называтся 'tightly coupled' - тесно связанный код, когда везде используются конкретные классы.

Когда используются только контракты - легко тестировать, легко заменять, легко реализовать модульную структуру и тд.

Это настолько меньшее зло, что почти не зло вообще smile

#70 Re: Laravel 5.x » Новый формат маршрутов в laravel » 21.02.2016 16:48:42

Способов несколько, и насколько я помню - оба упомянутых способа до сих пор действуют

В 5.2 только вынесли все стандартные middleware в группу (по дефолту не загружаются), больше ничего в маршрутизации не менялось

#71 Re: Laravel 5.x » Контракты » 21.02.2016 05:51:40

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

Скажем есть класс Webmoney, который реализует онлайн-платежи через Webmoney, и есть контроллер Billing, который на сайте форму платежей и так далее показывает.

Если в контроллере Billing указан абстрактный интерфейс PaymentInterface, а класс Webmoney его реализует - то в будущем перейти на, скажем, Яндекс Деньги будет очень просто - надо будет написать класс Yandex, который будет реализовать тот же контракт PaymentInterface и где-нибудь в Laravel переключить Webmoney на Yandex - и все.

В контроллер ВООБЩЕ не придется заходить.

В реальном проекте - таких зависимостей могут быть десятки, и если все классы и контроллеры явно указывают Webmoney, а начальство скажет "а давай лучше PayPal" - может понадобиться в миллион файлов идти и править. И так каждый раз!

Ну и стоит добавить, что тестировать легче, когда используются контракты. Фейковый класс реализующий узкий набор методов - проще куда подставить.

#72 Re: Laravel 5.x » Есть ли проект с открытым исходным кодом на laravel ? » 20.02.2016 03:03:15

Nepster пишет:

Тоесть очень большая гибкость, можно собрать что угодно. В случае ларавель, даже с расширением у меня не работает переходы по методам в ide, что очень сильно напрягает.
Опять таки в laravel есть крутые штуки по сравнению с yii2, но в тоже время в yii2 тоже есть очень крутые штуки.

С этим то я согласен. Просто неудачные имена для методов выбраны - это делает код Yii2 менее читаемым.

#73 Re: Laravel 5.x » Есть ли проект с открытым исходным кодом на laravel ? » 19.02.2016 16:54:19

В Laravel читабельнее код выходит в итоге, на это и акцент (отсюда и популярность частично).

В идеале не нужны комментарии и документация, весь код - как документация.

А вот взять приведенный кусок из Yii:
$model = Organization::find()
            ->andWhere(['alias' => $alias])
            ->joinWith(['user' => function ($query) {
                $query->status(User::STATUS_ACTIVE);
                $query->joinWith('profile');
            }])->one();

- Как можно что-то найти без параметров поиска? Feeling lucky, как в Google?
- Как может быть andWhere() сразу после поиска? найти()->иГде()? Бред с лексической точки зрения
- один() - один откуда? случайно, из конца, из начала?

Можно подумать, что это мелочи все - но это очень сильно влияет на читаемость кода

#75 Re: Laravel 5.x » И снова авторизация » 19.02.2016 03:23:01

Ну, если желание настойчивое - в 5.2 же есть поддержка разных реализаций Auth одновременно.

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