Laravel по-русски

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

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

#1 Re: Laravel 6/7/8/9/10 » Как из записи выбрать модель, которая вместе должна выводиться? » 26.10.2023 09:53:06

Делай так, чтобы работало. Ничего плохого в switch нет.
Насколько я понял, ты пытаешься хранить в базе шаблоны. Не то чтобы это было невозможно, но imho это ненужная сложность и есть свои минусы.

#2 Re: Laravel 6/7/8/9/10 » Dashboard » 26.10.2023 09:43:39

https://themeforest.net/item/letz-larav … t/26531442
логинишся с данными, подставляемыми автоматом. в демке видишь список компонент. вероятно открыв компоненту сумеешь через инспектор добраться до используемых стилей и скриптов )

#3 Re: Laravel 6/7/8/9/10 » Ошибка в паспорте laravel » 08.10.2023 19:13:48

По какому руководству делаешь? Все детали как и что прописывать обычно указываются в руководстве.
Если сказано "you may load your application's encryption keys by defining them as environment variables" это значит что этот параметр прописывается в .env.


Passport::routes() это просто подключение пачки готовых маршрутов из пакета. Там внутри прописан каждый маршрут в отдельности. К ключам это отношения не имеет! Не путай горячее с зелёным.

#4 Re: Laravel 6/7/8/9/10 » маршрутизация » 08.10.2023 19:04:20

@Biko ты пишешь "свой шаблон", "свой шаблон". Как-будто мы разграничиваем права на шаблоны. (На самом деле мы раздаем права на маршруты или экшены, т.е. на метод контроллера, а не на шаблон)

Годный пример контроля доступа (авторизации) в зависимости от роли есть в документации: https://laravel.com/docs/10.x/middlewar … parameters
Тебе нужно ограничить доступ к маршрутам
- добавить метод hasRole() у User, где ты будешь сравнивать параметр со значением поля role
- написать мидлварь по образцу из доки
- привязать мидлварь с параметром — именем роли к каждому маршруту или сразу к группе маршрутов.

Другая задача: "если он ... чтобы ему открывался ...". Это ты можешь реализовать в методе аутентификации. В доке это метод LoginController:authenticate(). Тебе надо изменить его, прописав в redirect() разные значения в зависимости от роли.

#5 Re: Laravel 6/7/8/9/10 » Обращение к не существующей таблице » 23.06.2023 16:54:46

Table 'category_bookins' doesn't exist

Eloquent может добавить 's' когда сам додумывает имя таблицы из имени класса-модели. Но чтобы убрать 'g' это фантастика. Где-то ты сам прописал именно так, просто поищи это слово глобально по коду.

#6 Re: Laravel 6/7/8/9/10 » Жалуется на метод маршрута » 09.06.2023 09:43:24

Переход по ссылке - это запрос методом GET. У тебя не описан маршрут для GET, именно об этом тебе говорит сообщение об ошибке. Почему ты решила, что должно быть иначе?

Вообще, считается нормой не изменять данные в методе GET. Поэтому выглядит абсолютно логично, что твой маршрут описан так. Ошибка только в использовании ссылки — тут надо слать форму, а не делать переход. А так как браузер умеет только формы GET или POST, то в этой форме должно быть скрытое поле _method

как рекомендуют в документации
@method('PATCH')
или
{{ method_field('PATCH') }}
что в итоге будет преобразовано в
<input type="hidden" name="_method" value="PATCH">

#7 Re: Laravel 6/7/8/9/10 » Не работают маршруты » 09.06.2023 09:21:31

include/require это не ларавелевский подход. Метод group принимает строку - путь до файла, т.е. у тебя function(){require можно и нужно убрать.

https://darkghosthunter.medium.com/lara … 3f8ba09f49
https://8bityard.com/how-to-create-mult … laravel-8/

#8 Re: Laravel 6/7/8/9/10 » Количество объектов/материалов на первой странице листинга » 17.05.2023 11:34:16

...->paginate($perPage)

когда этот необязательный параметр пропущен, то внутри метода paginate() вычисяется как

$perPage = $perPage ?: $this->model->getPerPage();

...

public function getPerPage()
{
    return $this->perPage;
}

то есть можнро задать значение по умолчанию для конкретной модели.

P.S. Используй хорошую IDE и смотри её подсказки, прыгай в определение методов!

#9 Re: Laravel 6/7/8/9/10 » Кэш Статус Онлайн и офлайн. Ларавель 7 » 30.03.2023 09:54:22

@if(Cache::has('user-online' . $user->id))
можно заменить на
@if( $user->last_seen->greaterThan(now()->subMinutes(ONLINE_TIMEOUT)) )

будет также работать ->gt(x) : https://carbon.nesbot.com/docs/#api-comparison
да и просто сравнение ">", но это вроде бы недокументированная фича PHP

Здесь я подразумеваю что last_seen у тебя автоматически тайпкастится в Carbon. Потому что так принято в Laravel wink

— This is the way. May the force be with you.

#10 Re: Laravel 6/7/8/9/10 » Кэш Статус Онлайн и офлайн. Ларавель 7 » 30.03.2023 09:36:01

"Last seen" читается как "Последний раз видели". Сохраняй просто now(). Время последнего визита пользователя не зависит от величины таймаута для вычисления кто онлайн. Логика!!!

А в контроллере вычисляй время назад, то есть отнимай от текущего. Типа
User::where('last_seen', '>', now()->subMinutes(ONLINE_TIMEOUT))->count()

Еще раз: кеш здесь не нужен. Кеш кроме того что необязателен, еще не имеет смысла там, где постоянно происходит обновление. Он оптимизирует ситуацию когда редко пишется и часто читается. И при отсутствии нужных данных в кеше приложение должно выдавать те же результаты! (только может быть немного медленнее) Если у тебя не так, то это логическая ошибка.

#11 Re: Laravel 6/7/8/9/10 » Кэш Статус Онлайн и офлайн. Ларавель 7 » 28.03.2023 11:03:26

Кеш по определению нечто необязательное, может отсутствовать в любой момент. Поэтому применять его таким образом нелогично.

Статус онлайн пользователя определяют через сохранение отметки о его последнем визите. Например в самой таблице пользователей или в специальной таблице. И считаем что пользователь онлайн если он был здесь не более 10 минут назад, к примеру.

#12 Re: Lumen » Как авторизоваться с помощью api_token? » 28.03.2023 10:47:58

Код, который ты цитируешь, "в котором берётся api_token" smile на самом деле служит для аутентификации по токену. То есть когда правильный токен присутствует в запросе, то в программе будет доступен "текущий пользователь". Вот что там происходит!

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

Как мне им воспользоваться в контролёре app/Http/Controllers/AuthorController.php ?

как в документации написано:

$user = Auth::user();
или
$user = $request->user();

#13 Re: Lumen » Как авторизоваться с помощью api_token? » 28.03.2023 10:41:07

Мне нужно посмотреть пришёл ли вместе с post или get запросом APP_KEY и в зависимости от этого продолжить выполнение метода или вернут 403 ошибку если APP_KEY не пришёл.

API_KEY не так работает. Ты путаешь ключ и токен. Ключ используется скриптами для шифрования или подписывания какой-то информации. Используется для создания токенов доступа. Буквально сам ключ не передается никуда!

Советую делать по инструкции из официальной документации. Разделы Authentication, Authorization

#14 Re: Laravel 6/7/8/9/10 » Надо узнать количество записей » 15.02.2023 07:16:51

Нет, про копирование id в path речи не было. Но ты можешь попробовать это.
Уже пора пробовать, @kull88, давай дальше сам.

#15 Re: Laravel 6/7/8/9/10 » Надо узнать количество записей » 14.02.2023 12:58:03

Например если хранить путь как это принято в Materialized Paths, это будет очень похоже на оглавление в книге.
Я здесь оставил поле parent_id только чтобы тебе было понятнее как они между собой связаны. Для технологии это MP не нужно.

id parent_id path
-- --------- ----
1  null      '1.'
2  1         '1.1.'
3  1         '1.2.'
4  2         '1.1.1.'
5  4         '1.1.1.1.'
. . .

Запрос посчитает количество дочерних узлов для id=2 (+1 т.к. сам узел тоже посчитан)

SELECT COUNT(*) 
FROM users 
WHERE path LIKE '1.1.%'

#16 Re: Laravel 6/7/8/9/10 » Надо узнать количество записей » 14.02.2023 12:33:41

Это называется дерево ))) А отношения между пользователями такие обычно при участии в реферальной программе. Но ничего этого не прозвучало )))

Есть несколько эффективных методов хранения древовидных структур - Nested Sets, Materialized (или Storing) Paths, Closure Tables... они позволяют в один запрос к базе получить количество дочерних узлов или добыть сами узлы.
А для id - parent_id (т.н. Adjacency List), такое невозможно. Теперь ты знаешь какие слова гуглить.
Не за что!

#17 Re: Laravel 5.x » Не видит подключаемые link (css,js) на 127.0.0.1:8000 » 01.02.2023 16:19:07

DirectoryIndex public/index.php
и
RewriteRule ^(.*)$ public/index.php [L]

как бы намекают что у тебя сайт (был) настроен не на месте. или на месте но не настроен ))) потому что корень сайта уже должен быть в папке public и значит слова public уже не должно появляться в .htaccess

если ты что-то решил у себя, то поделись с другими. не веди себя как будто тебе здесь должны, а ты ничего не должен. мы все в одном положении!

#18 Re: Laravel 6/7/8/9/10 » Надо узнать количество записей » 29.01.2023 14:18:56

Друг, чтобы программировать надо научиться вопросы задавать внятно. Я несколько раз перечитывал и не понял в чем затруднение. Вот это просто шедевр:

где id=3 потом взять id где равен 3 и пройти дальше.

куда тебе надо пойти?

Общее количество записей добывается если убрать условие where(), оставить только count()

#19 Re: Laravel 6/7/8/9/10 » Отношения моделей вместо построителя запросов » 29.01.2023 14:06:59

Через отношения или чтобы имена не светились? Это разные задачи.

Если буквально хочешь использовать отношения, то смотри в доках методы with, withCount. Это не равноценно join, т.е. будет другой запрос, но цель возможно будет достигнута.

Если надо взять имя таблицы из определения класса-модели, то сам Тейлор совтует делать так: with(new Model)->getTable();

#21 Re: Хорошие практики (FAQ) » Регистрация пользователя, User::create() нет такого метода » 29.01.2023 13:51:00

Странно что нет метода create. Покажи свой класс User. И скопируй сюда об ошибке как оно есть буквально.
[offtopic]
не налегай сильно на видеоуроки. они приучают отключать голову и просто копировать текст. чтобы росли скиллы в программировании, надо себя напрягать - как с мышцами.
[/offtopic]

#22 Re: Laravel 6/7/8/9/10 » VS code не видит namespace. Запуск фреймворка » 07.01.2023 19:08:02

@loren, про расширения vs не знаю, так как не пользуюсь. А про открытие artisan через open server - он и не должен работать в веб-сервере как php! Потому что у него нет расширения. Странно что ты вообще имеешь к нему доступ через веб-сервер, ведь он должен быть за пределами Document Root. Надо настроить сайт так, чтобы он начинался с папки public, а не с корня проекта.

#23 Re: Laravel 6/7/8/9/10 » Вызов метода контроллера непосредственно в шаблоне Laravel » 19.12.2022 10:16:43

Сейчас все это берется из БД. Соответственно, в каждом таком инклуде я вызываю метод контроллера для получения нужных данных.

Вот это неожиданный переход. Почему именно метод контроллера? ))) По классике данные доставляются в представление через параметры вызова view. Если этого мало - есть View Composer. А если прям сильно хочется обращаться к чьим-то методам, то в шаблоне можно добывать некий сервис через @inject и обращаться к его методам.

Я бы таки ограничился параметрами вьюхи. Из главного представления в инклуды передавал бы нужные им параметры.
Есть еще компоненты это типа "умные инклуды".

#24 Re: Laravel 6/7/8/9/10 » Подскажите, как в route подставить данные из бд? » 07.12.2022 21:40:48

Будь я админ, я б тебя забанил за ссылки в первом же посте. )))

В программировании самое важное это умение внятно сформулировать цель. Без этого будет просто трата времени и сил. Весь твой пост это пример невнятности.

Роутом (маршрутом) обычно называют соответствие URL и обработчика. То что описано в routes/web.php. А не функция route().

Такие варианты не срабатывают

Потому что не должны. Не надо стрелять вслепую. Надо осмысленно писать код, зная синтаксис.

Если у тебя проблема с подстановкой значений в строку, то бд здесь скорее всего не при чем. Почитай документацию про строки в PHP. Про шаблоны в Laravel. Попробуй так и сяк (без бд). Накопи опыт.

Форум не заменит документацию.

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