Ответы пользователя по тегу Laravel
  • Как сделать валидацию дерева в laravel/php?

    private function rules($list)
    У вас она возвращает редирект...
    Тогда как в функции private function recursive($list, $parentId) - она просто вызывается и ничего не возвращается
    $this->rules($list);
    Я бы на вашем месте сделал бы так:
    public function store($tags)
        {
            try {
                    DB::transaction(function () use ($tags) {
                        $this->recursive($tags, null);
                    });
            } catch (ValidationException $e) {
                return redirect('tags-closure')->withInput($e->getMessage());
            }
    
        }
    private function recursive($list, $parentId)
        {
            if ($this->checkToFillable($list)) {
                $this->validate($list);
                $id = DB::table('tags')->insertGetId(
                    array(
                        'name' => $list['name'],
                        'description' => $list['description'],
                        'parent_id' => $parentId
                    )
                );
                if ($parentId) {
                    $query = "INSERT INTO `tags_closure` (`ancestor_id`, `descendant_id`, `depth`)
                        SELECT `ancestor_id`, $id, `depth`+1
                        FROM `tags_closure`
                        WHERE `descendant_id` =" . $parentId;
                    DB::statement($query);
                } else {
                    DB::table('tags_closure')->insert(
                        [
                            'ancestor_id' => $id,
                            'descendant_id' => $id,
                            'depth' => 0
                        ]
                    );
                }
                if (isset($list['closureTag'])) {
                    $this->recursive($list['closureTag'], $id);
                }
            } else {
                foreach ($list as $element) {
                    $this->recursive($element, $parentId);
                }
            }
        }
    
    private function validate($list)
        {
                Validator::make([
                    'name' => $list['name'],
                    'description' => $list['description'],
                ], [
                    'name' => 'required|scripts',
                    'description' => 'required|scripts'
                ]);
    
        }
    Ответ написан
    2 комментария
  • Почему очереди не срабатывают без команды artisan queue:listen в LARAVEL?

    Да, это нормально - так и должно работать.
    Принцип очереди такой: Вы в трубку (tube, channel) напихиваете своих небольших задачек (например - отправка мыла одному пользователю), в это время висит процесс, который слушает вашу трубку и как только в ней появились задачки - начинает их обрабатывать.
    Если нагрузка у вас не большая или не хочется с очередью играться - можно в качестве драйвера поставить "sync" - сообщение будет уходить как обычно.

    Если же очереди нужны - рекомендую почитать про демонизацию процесса слушателя или про супервизора
    laravel.com/docs/5.1/queues#supervisor-configuration
    Ответ написан
    3 комментария