Laravel по-русски

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

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

#1 Re: Laravel 6/7/8/9/10 » При установке нового проекта laravel 10 ошибка npm » 19.12.2023 14:17:22

Просто удалил установку bun из dockerfile laravel и все заработало

Т.к. я не очень в курсе потока хайпа в мире JS, пришлось вникать что же такое bun.

While Node.js uses Google's V8 engine that power's Chrome browser, Bun uses JavaScriptCore (JSC), which is an open source JavaScript engine developed by Apple for Safari.

всё понятно - насрать и забыть. сафари это паршивая овца в мире эппл. яблоки тащят и навязывают его несмотря на глюкавость. этакий новый IE6: все страдают, а игнорировать не могут, пока хозяева сами не объявят его мёртвым.

#2 Re: Laravel 6/7/8/9/10 » При установке нового проекта laravel 10 ошибка npm » 19.12.2023 14:05:14

curl -s https://laravel.build/имя проекта | bash

Это всё не совскем про установку Laravel 10, а про установку через Laravel Sail - якобы средство для упрощения установки.

Непонятно зачем авторы Laravel плодят параллельные проекты с какими-то вспомогательными обертками. Как по мне они  не упрощают, а только усложняют дело. Они исходят из того, что начинающий разработчик не знает ни git, ни docker, ни основных утилит unix-подобных систем. Но случись малейшая неприятность, оказывается что придется сначала вникнуть в магию этих доп оболочек, а потом таки в git, docker и всё остальное )))

уже есть Homestead - оболочка над vagrant - оболочкой над virualbox для установки в виртуальной машине
утилита laravel - оболочка над git + еще что-то-там-всё-в-одном для того чтобы не знать как это делают в git
valet - всё-в-одном для установки laravel + стек LEMP в среде MacOS
теперь ещё Sail - оболочка чтобы не знать docker, но попробовать запустить laravel в нём

86la046.jpeg

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

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

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

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

#5 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() это просто подключение пачки готовых маршрутов из пакета. Там внутри прописан каждый маршрут в отдельности. К ключам это отношения не имеет! Не путай горячее с зелёным.

#6 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() разные значения в зависимости от роли.

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

Table 'category_bookins' doesn't exist

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

#8 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">

#9 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/

#10 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 и смотри её подсказки, прыгай в определение методов!

#11 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.

#12 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()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#17 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.%'

#18 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), такое невозможно. Теперь ты знаешь какие слова гуглить.
Не за что!

#19 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

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

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

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

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

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

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

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

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

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

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

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

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

#24 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, а не с корня проекта.

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

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

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

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

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