Laravel по-русски

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

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

#1 Laravel 6/7/8/9/10 » Как получить авторов статьи через связь многие ко многим » 06.11.2023 15:20:48

grafillo
Ответов: 1

Есть ли в ларавеле связь которая может связать три таблицы через многие ко многим, суть запроса такова
есть модели: тэги, статьи, авторы,  как через тэги связь многие ко многим к статьям получить ещё и авторов ко всем статьям? То есть через тег получить все статьи содержащие этот тэг с авторами?

#2 Laravel 6/7/8/9/10 » Как в миграции уникализировать пару значений в пивот таблице » 19.01.2023 13:33:06

grafillo
Ответов: 2

Есть таблицы group и user связанные многие ко многим, как в пивот таблице уникализировать пару значений? то есть в таблице group_user нужно чтобы строка значений user_id и group_id могла быть только одна с данной группой и данным юзером, то есть
если есть значение  user_id = 1 group_id = 1 нельзя было вставить строку с такими значениями.

#4 Laravel 6/7/8/9/10 » Не работает почта от BREEZE » 19.05.2022 12:15:11

grafillo
Ответов: 1

Установил авторизацию laravel breeze и она почемуто не отсылает почту, у меня установлен опен сервер
если пользуюсь функцией mail(); - то всё работает, отправленные письма сохраняются в папке опен сервера, а если прохожу регистрацию то написано что письмо отправлено но его нет ни в папке ни в клиенте, даже если ставлю в .env MAIL_MAILER=log  в логах ничего не сохраняется, подскажите что делать как исправить отправку почты laravel breeze

#5 Laravel 6/7/8/9/10 » Как использовать куки для идентификации человека » 18.01.2022 18:12:10

grafillo
Ответов: 0

Необходимо идентифицировать человека и его настройки которые он выбрал чтобы в следующем заходе на сайт они были такие же, как это сделать с помощью куков?
пишу код куков, если ставлю параметру age значение 1 то всё равно при обращении к этой переменной в куках она пустая, как это работает в ларавеле?

   
            cookie('age',1);
        dd(cookie('age'));

#6 Re: Laravel 6/7/8/9/10 » падают юнит тесты » 27.07.2021 09:27:22

если ставлю

 public function boot()
    {
        $this->bootEvents();
        $this->mapRoutes();

        \Stancl\Tenancy\Middleware\InitializeTenancyByDomain::$onFail = function () {
            abort(404);
            
        };

        $this->makeTenancyMiddlewareHighestPriority();
    }

     abort(404); то возникает ошибка юнит тестов

1) Tests\Feature\ExampleTest::testBasicTest
Expected status code 200 but received 404.
Failed asserting that 200 is identical to 404

что конкретно в коде надо именить и что оно вообще просит?

#7 Laravel 6/7/8/9/10 » падают юнит тесты » 26.07.2021 17:02:49

grafillo
Ответов: 2

Падает юнит тест когда вывожу ошибку 404

 public function boot()
    {
        $this->bootEvents();
        $this->mapRoutes();

        \Stancl\Tenancy\Middleware\InitializeTenancyByDomain::$onFail = function () {
            //abort(404);
            return response()->view('404');
        };

        $this->makeTenancyMiddlewareHighestPriority();
    }

есть установленные тенанты, если тенанта не существует то должно выводится ошибка 404, любым способом вывожду ошибку 404 но падают юнит тесты они отвечают

1) Tests\Feature\ExampleTest::testBasicTest
Expected status code 200 but received 500.
Failed asserting that 200 is identical to 500.

он типа ожидает 200 ответ но получает ошибку 500, как это решается и в чём проблема?

#8 Laravel 6/7/8/9/10 » Как получить ошибки валидации в JSON » 07.07.2021 17:17:59

grafillo
Ответов: 1

У меня есть регистрация в которой валидатор проверяет поля

$request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|confirmed|min:8',
            'phone' => 'required|unique:users'
        ]);

я обращаюсь в функцию регистрации через аякс запрос, как получить ответы в форме JSON? Сейчас когдая  ловлю ошибку

 axios.post(`/generatesms`, {phone: phone})
                .then(response => {
          
                    if (response.data.success == 'true') {

                        document.querySelector('#enterPhone').innerHTML = phone;
                        navigationEnterMenu(target); //успех
                        next_sms_time = response.data.data.timer;
                        enterTimer();

                    }else{

                        document.querySelector('#madalEnterPhone').classList.remove('js-modal-enter-content-open');
                        document.querySelector('.modal-enter-form-phone-text').innerHTML = phone + '<br>Не зарегистрирован!';
                        document.querySelector('#errorEnter').classList.add('js-modal-enter-content-open');

                    }

                }).catch(err => {
                    console.log(err);
                

            });

в catch(err) если валидация не пройдена выходит вот это

Error: Request failed with status code 422
    at createError (app.js?v1.00:607)
    at settle (app.js?v1.00:878)
    at XMLHttpRequest.handleLoad (app.js?v1.00:82)

как вывести нормально ошибку валдиации чере аякс подскажите пожалуйста?

#9 Laravel 6/7/8/9/10 » Как сделать очередь сидов » 16.06.2021 10:46:44

grafillo
Ответов: 1

Есть файлы сидов, когда я делаю мигрэйт рефреш они запускаются в не том порядке котором надо и всё ломается, как выстроить порядок сидов?

#10 Re: Laravel 6/7/8/9/10 » Опять магическая ошибка от ларавел:This cache store does not support » 10.06.2021 20:11:30

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

#11 Re: Laravel 6/7/8/9/10 » Опять магическая ошибка от ларавел:This cache store does not support » 09.06.2021 22:38:44

шта? х)
пишу русским по белому, если убираю роут из под тенатнов
вот так выглядит роут под тенантами

Route::middleware([
    'web',
     InitializeTenancyByDomain::class,
])->namespace("Auth")->group(function () {
    Route::get('/registration', 'RegisteredUserController@create')->name('shop.auth.register');

});

вот так выглядит роут без тенантов

Route::middleware([
    'web',
])->namespace("Auth")->group(function () {
    Route::get('/registration', 'RegisteredUserController@create')->name('shop.auth.register');

});

вот тот роут котоырй без тенантов работает нормально и валидация не выдаёт ошибок вот тот который под тенантами выдаёт вот эту ошибку unknown.png?width=1020&height=413если валидация находит ошибку, в чём фантазия сударь? в том что валидация из под тенантов не пашет?

#12 Re: Laravel 6/7/8/9/10 » Не работает стандартная защита BREEEZE от множественного запроса » 08.06.2021 13:33:08

Все проверенно, hit работает,  RateLimiter почемуто не запоминает число попыток, это скорее всего из-за кеша который я поставил CACHE_DRIVER=array ибо с другим драйвером не работают тенанты  из другого моего поста.

#13 Re: Laravel 6/7/8/9/10 » Опять магическая ошибка от ларавел:This cache store does not support » 08.06.2021 13:28:33

Потомучто когда валидация не проходит
$request->validate([
            'phone' => 'required|string|max:255|exists:users,phone',
        ]);
то выскакивает эта ошибка:This cache store does not support tagging.
Если валидация не определяет ошибок то ничего не выскакивает. Если я убираю роут из под тенантов   https://tenancyforlaravel.com/ , то всё также работает нормально и при валидации формы на экран вью выдаёт сообщение почему не прошла валидации. Если вставляю обратно под тенанты, то, если валидация не проходит, на экран выскакивает ошибкаunknown.png?width=1020&height=413

#14 Re: Laravel 6/7/8/9/10 » Опять магическая ошибка от ларавел:This cache store does not support » 07.06.2021 19:27:59

и как надо прописать валидацию чтобы она использовала раздельный кеш?
там и без xdebug видно что вызывается класс кэша из тенантов который вызывает ошибку.

#15 Re: Laravel 6/7/8/9/10 » Опять магическая ошибка от ларавел:This cache store does not support » 04.06.2021 10:15:32

причина найдена, но не устранена ктонить работал с тенантами https://tenancyforlaravel.com/ они почемуто вызывают свой кэш при валидации. Ктонить знает как это устранить?

#16 Re: Laravel 6/7/8/9/10 » Опять магическая ошибка от ларавел:This cache store does not support » 03.06.2021 20:37:21

точнее не работает валидация  ни правила ни валидация а функция with работает

$request->validate([
            'phone' => 'required|string|max:255|exists:users,phone',
        ]);

public function rules()
    {
        return [
            'smscode' => 'required',
            'phone' => 'required'
        ];
    }

то есть когда запрос не проходит валидацию  выскакивает ошибка This cache store does not support tagging.

#17 Laravel 6/7/8/9/10 » Опять магическая ошибка от ларавел:This cache store does not support » 03.06.2021 18:18:51

grafillo
Ответов: 12

This cache store does not support tagging. Есть два проекта, на одном всё работает, на другом выскакивает ошибка при использовании функции with('status', $status); В обоих проектах кэш указан идентично

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

Ктото может помочь разобраться в очередной магии ларавел?

#18 Re: Laravel 6/7/8/9/10 » Как собрать все ошибки в одном месте » 03.06.2021 15:50:58

вы немного путаете объекты withErrors и Validator идентичны они отличаются очень незначительно,
объект withErrors:

Illuminate\Support\ViewErrorBag Object ( [bags:protected] => Array ( [errors] => Illuminate\Support\MessageBag Object ( [messages:protected] => 
Array (	[0] => Array ( [0] => В базе нет такого телефона! ) ) [format:protected] => :message ) ) ) 

и объект валидатора

Illuminate\Support\ViewErrorBag Object ( [bags:protected] => Array ( [default] => Illuminate\Support\MessageBag Object ( [messages:protected] => Array ( 	[smscode] => Array ( [0] => The smscode field is required. )   [phone] => Array ( [0] => The phone field is required. ) ) 
	[format:protected] => :message ) ) )

#19 Re: Laravel 6/7/8/9/10 » Как собрать все ошибки в одном месте » 03.06.2021 13:52:41

получается что функция withErrors не функциональна и для неё отдельно в представление нужно код добавлять?

#20 Laravel 6/7/8/9/10 » Как собрать все ошибки в одном месте » 03.06.2021 12:00:15

grafillo
Ответов: 4

У меня есть валидатор и функция которая возвращает ответ либо с ошибкой либо нет, и чтобы получить эти два ответа приходится во вью писать два разных кода, возможно ли собрать все ошибки в одном месте? Пробовал и withErrors(,);  и просто with("errors",'В базе нет такого телефона!') и всё равно разный доступ к ним.

public function generateSms(Request $request)
    {
        $request->validate([
            'phone' => 'required|string|max:255',
        ]);

        $smscode = 12345;
        $phone = $request->phone;

        $user = User::where('phone',$phone)->update(['smscode' => $smscode]);
        if(!$user){
            return  redirect()->route('phonelogin')->withErrors('В базе нет такого телефона!',"errors");
        }

        return  redirect()->route('phonelogin')->with('success',"Вам отправлено смс с кодом!");


    }

доступ во вью

{{ $errors->errors->first() }}
        @if ($errors->any())
            <div class="">
                <ul>
                    @foreach($errors->all() as $error)
                        <li>
                            {{$error}}
                        </li>
                    @endforeach
                </ul>

            </div>
        @endif

#21 Re: Laravel 6/7/8/9/10 » Не работает стандартная защита BREEEZE от множественного запроса » 03.06.2021 10:10:53

Разобрался в чём проблема, но не понял как устранить ,
RateLimiter::attempts($this->throttleKey());  - почему-то не запоминает количество попыток и всегда выводит 1, почему так происходит?

#22 Laravel 6/7/8/9/10 » Не работает стандартная защита BREEEZE от множественного запроса » 02.06.2021 18:17:38

grafillo
Ответов: 3

Не работает стандартная защита авторизации бриз от множественного запроса RateLimiter, я пробовал ставить
RateLimiter::tooManyAttempts($this->throttleKey(), 5)  вместо 5 1 и ничего не работает, RateLimiter::tooManyAttempts($this->throttleKey(), 5)) всегда возвращает false, что делать кто знает?

 public function authenticate()
    {
        $this->ensureIsNotRateLimited();

        if (!Auth::check()) {
            RateLimiter::hit($this->throttleKey());

            throw ValidationException::withMessages([
                'phone' => __('auth.failed'),
            ]);
        }

        RateLimiter::clear($this->throttleKey());
    }

    /**
     * Ensure the login request is not rate limited.
     *
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function ensureIsNotRateLimited()
    {
        if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
            return;
        }

        event(new Lockout($this));

        $seconds = RateLimiter::availableIn($this->throttleKey());


        throw ValidationException::withMessages([
            'phone' => trans('auth.throttle', [
                'seconds' => $seconds,
                'minutes' => ceil($seconds / 60),
            ]),

        ]);

    }

    /**
     * Get the rate limiting throttle key for the request.
     *
     * @return string
     */
    public function throttleKey()
    {
        return Str::lower($this->input('phone')).'|'.$this->ip();
    }
}

#23 Re: Laravel 6/7/8/9/10 » ларваел обращается к роутам которых нет и выводит адреса которых нет » 28.05.2021 14:07:04

вопрос решился, я ещё установил fortify и хотя её не использовал файлы ядра каким-то образом перенаправляли файлы breeze, кароч мутная шняга эта ларавел, не используешь код одного так он переделывает код другого причём из ядра както и это даже не увидеть, а гит вообще мне говорил что эти файлы вне проекта х)
как это работает до конца не понятно, а можно ли просмотреть все установленные дополнения в ларавел?

#24 Laravel 6/7/8/9/10 » ларваел обращается к роутам которых нет и выводит адреса которых нет » 28.05.2021 10:41:23

grafillo
Ответов: 2

Кароче магия происходит, установлены в ларавел тенанты и вручную перенесена авторизация breeze. После регистрации автоматически создаётся письмо подтверждения  http://site1.localhost:8000/email/verif … 881246d065
но у меня нет email/verify/ такого роута в списке! Есть вот такой /verify-email/{id}/{hash}. После клика по ссылке происходит код который переадресовывает на

 return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');

и этот код запускается через роут /verify-email/{id}/{hash} , при том что в   RouteServiceProvider прописано

public const HOME = '/';

но он редиректит на http://site1.localhost:8000/home?verified=1 какбудто нет этой ссылки HOME, притом что ставлю функцию dd перед return redirect()->intended(RouteServiceProvider::HOME.'?verified=1 и dd не cрабатывает! Что это б... за магия происходит? Как это вообще работает? в проекте только две строчки с такой ?verified=1 ссылкой и на обеих не работает функция dd, то есть откуда вообще выполняется код? такое ощущение, что он вообще не с проекта берётся

#25 Re: Laravel 6/7/8/9/10 » Мидлвере ссылается на несуществующий роут » 28.05.2021 08:40:00

в проекте нету такого роута кроме как в  Handler.php, что  это за файл?
непарную кавычку исправил, а что такое xdebug?

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