Laravel по-русски

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

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

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

grafillo
Ответов: 1

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

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

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

#3 Re: Laravel 6/7/8 » Опять магическая ошибка от ларавел: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если валидация находит ошибку, в чём фантазия сударь? в том что валидация из под тенантов не пашет?

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

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

#5 Re: Laravel 6/7/8 » Опять магическая ошибка от ларавел: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

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

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

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

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

#8 Re: Laravel 6/7/8 » Опять магическая ошибка от ларавел: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.

#9 Laravel 6/7/8 » Опять магическая ошибка от ларавел: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

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

#10 Re: Laravel 6/7/8 » Как собрать все ошибки в одном месте » 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 ) ) )

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

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

#12 Laravel 6/7/8 » Как собрать все ошибки в одном месте » 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

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

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

#14 Laravel 6/7/8 » Не работает стандартная защита 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();
    }
}

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

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

#16 Laravel 6/7/8 » ларваел обращается к роутам которых нет и выводит адреса которых нет » 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, то есть откуда вообще выполняется код? такое ощущение, что он вообще не с проекта берётся

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

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

#18 Laravel 6/7/8 » Мидлвере ссылается на несуществующий роут » 27.05.2021 14:54:20

grafillo
Ответов: 3

Установил brezee аутентификацию, так как сложная структура сайта переименовал роуты

Route::get('/login', 'Auth\AuthenticatedSessionController@create')->name('shop.auth.login');
 Route::get('/verify-email', 'Auth\EmailVerificationPromptController@__invoke')->middleware('auth')
        ->name('shop.auth.verification.notice');

когда идёт обращение на адрес '/verify-email' то выдаётся ошибка Route [login] not defined. В файле Middleware\Authenticate.php прописал:

protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return Route(shop.auth.login');
        }
    }

Всё равно это не помогло, причём кто обращается к этому роуту в окне ошибки не показано. В чём может быть проблема и как узнать кто обращается к этому роуту?

#19 Re: Laravel 6/7/8 » Почему не ансетится сессион? » 25.05.2021 13:23:31

всё разобрался, функция dd мешает работе сессий, если её убрать всё отлично работает.

#20 Laravel 6/7/8 » Почему не ансетится сессион? » 24.05.2021 20:20:53

grafillo
Ответов: 2

есть две функции в классе, если запускаю роут который ведёт на функцию delCart то потом когда запускаю роут с функцией index массив сешн удаляется, то есть cart=[] пустой массив, если запускаю роут который запускает функцию addToCart то он обновляет массив только в окне где был запущен этот роут, в другом окне где открыт роут index массив не удаляется, что это за магия такая? две одинаковые функции одна работает другая нет.

public function index(){

        dd(session()->all());
        return view('shops.'.tenant('template').'.cart');
    }

    public function addToCart(Request $req, $id, $quantity){

//        if($req->session()->missing('cart')){
//            $cart = [];
//            $req -> session()->put('cart',$cart);
//        }
//
//       // dd(session()->all());
//
//        $cart_array = session()->get('cart');
//        foreach($cart_array as $key => $cart){
//            if($cart['id']==$id){
//
//              //  $product = $req -> session()->forget('cart.'.$key);
//
//              $cart_array[$key]['quantity'] += $quantity;
//              //$req ->session()->forget('cart');
//              //$req ->session()->put('cart',$cart_array);
//
//              //return ;
//            }
//        }

        $cart = [];
        $req -> session()->put('cart',$cart);
        //$req ->session()->put('cart',$cart_array);
        //dd($cart_array);
        dd(session()->all());
//
        $offers = Offer::with('product','feature')->where('id',$id)->first();

        if(empty($offers->id)){
            return response()->json(['result'=>'unsuccess','text'=>'Нет такого товара']);
        }

        //dd($offers->retail_price);
        $cart = ['id'=>$id,'quantity'=>$quantity,'name'=>$offers->product->name,'article'=>$offers->product->code_1c,'price'=>$offers->retail_price];
        $req ->session()->push('cart',$cart);
        $arr = session()->get('cart');
        $quantity= 0;
        foreach($arr as $quant){ $quantity += $quant['quantity']; }
        $summ_cart = 0;
        foreach($arr as $summ){ $summ_cart += $summ['price']*$summ['quantity']; }

        return response()->json(['result'=>'success','cart'=>$cart,'quantity'=>$quantity,'summ_cart'=>$summ_cart]);
        //return response()->json(['result'=>'success','text'=>'товар  добавлен в сравнение','quantity_product'=>count($arr)]);


    }

    public function delCart(Request $req){

        $cart = [];
        $req -> session()->put('cart',$cart);

    }

#23 Re: Laravel 6/7/8 » Почему ретурн не выводит текст » 23.05.2021 13:47:55

return ('addproduct'); -  выводит текст на экран если находится в функции addProductCompare, а если находится в функции addProduct не выводит.

#25 Laravel 6/7/8 » Почему ретурн не выводит текст » 21.05.2021 12:51:00

grafillo
Ответов: 10

Есть код:

public function addProductCompare(Request $req,$id){

        if (isset($_GET['isAdd'])){
               $this->addProduct($req,$id);
}else{
$this->delProduct();
}
}

public function addProduct(Request $req,$id){
return ('addproduct');

}

почемуто из функции эд продукт не выводится ретурн текстовым полем если прописать ретурн  в addProductCompare то всё нормально работает, почему так?

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