Lumen count(): параметр должен быть массивом или объектом, который реализует Countable

Я попытался создать загрузку нескольких изображений вместе с публикацией, но постоянно получаю ошибку в функции подсчета, когда пытаюсь подсчитать элементы в массиве. Для одного изображения код работает нормально, если я удалю этот массив и подсчитаю. Последняя версия Lumen, версия PHP 7.3, но я понизил ее до 7.1.

Код:

<?php
class PostController extends Controller {

    public function __construct() {
        $this->middleware('auth');
    }

    public function index() {
        return Auth::user()->post;
    }

    public function show($post_id) {
        $post = Post::findOrFail($post_id);
        if (Auth::user()->id !== $post->user_id) {
            return response()
                ->json(['status' => 'error', 'message' => 'unauthorized'], 401);
        }
        return $post;
    }

    public function store(Request $request) {
        $post = new Post;
        $post->setConnection('mysql1');
        $user = User::where('token', $request->token)
            ->first();
        if ($user) {
            $post1 = $post->create(['post_id' => rand() , 'title' => $request->title, 'cooked_time' => $request->cooked_time, 'user_id' => $request->token, 'location' => $user['name'], 'dispose_time' => strtotime('+01 hours', strtotime($request->cooked_time)) , 'food_type' => $request->food_type, 'description' => $request->description, 'serve_quantity' => $request->serve_quantity, 'lat' => $request->lat, 'long' => $request->long, ]);
            $post = Post::where('user_id', $request->token)
                ->orderBy('id', 'DESC',)
                ->limit('1')
                ->get();

            if ($request->hasFile('image')) {
                // $image_array = [];
                $image_array = $request->file('image');
                $array_len = count($image_array);

                for ($i = 0;$i < $array_len;$i++) {
                    $image_size = $image_array[$i]->getClientSize();
                    $image_ext = $image_array[$i]->getClientOriginalExtension();
                    $new_image_name = rand(123456, 99999999) . "." . $image_ext;
                    if (!function_exists('public_path')) {
                        /**
                         * Return the path to public dir
                         *
                         * @param null $path
                         *
                         * @return string
                         */
                        function public_path($path = null) {
                            return rtrim(app()->basePath('public/' . $path) , '/');
                        }
                    }
                    $destination_path = public_path('/images');
                    $image_array[$i]->move($destination_path, $new_image_name);
                    $image = new PostImage;
                    $images->image_name = $new_image_name;
                    $images->post_id = $post1['post_id'];
                    $images->save();
                }

            }
            return response()
                ->json(['message' => 'success', 'user' => $user['name'], 'post' => $post1, ], 200);
        }
    }

    public function update(Request $request, $post_id) {
        $post = Board::find($post_id);
        if (Auth::user()->id !== $post_id->user_id) {
            return response()
                ->json(['status' => 'error', 'message' => 'unauthorized'], 401);
        }
        $post->update($request->all());

        return response()
            ->json(['status' => 'success', 'post' => $post], 200);
    }

    public function destroy($id) {
        $post = Post::find($post_id);
        if (Auth::user()->id !== $post->user_id) {
            return response()
                ->json(['status' => 'error', 'message' => 'unauthorized'], 401);
        }
        if (Post::destroy($id)) {
            return response()->json(['status' => 'success', 'message' => 'Post Deleted Successfully'], 200);
        }
        return response()
            ->json(['status' => 'error', 'message' => 'Something Went Wrong']);
    }
}

@karel Я использую текстовый редактор, он сообщит мне, если возникнут какие-либо неожиданные скобки или ошибки.

Pushpendra Pal 19.03.2019 09:02

@karel, но это не проблема для меня, проблема в функции подсчета, когда я пытаюсь передать изображение

Pushpendra Pal 19.03.2019 10:46

Как выглядит форма? В настоящее время вы ищете $request->file('image'), который, похоже, не является массивом. Возможно, ваша форма должна выглядеть как <input type = "file" class = "form-control" name = "images[]" ..>. Сделайте var_dump вашего $request->file('image'), чтобы проверить, какие данные вы получили.

Bert Maurau 19.03.2019 11:13

@BertMaurau Я просто создавал API, я не делал интерфейс, который тестирую через почтальона.

Pushpendra Pal 19.03.2019 11:18

@BertMaurau Я просто создавал API. Я не делал внешний интерфейс. Я тестирую через почтальона после того, как вы сказали var_dump. Я попробовал, и вот что я получил. :"Symfony\Component\HttpFoundation\File\UploadedFile"‌​:private]=> bool(false) }

Pushpendra Pal 19.03.2019 11:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
1 473
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

http://php.net/manual/en/migration72.incompatible.php#migration72.incompatible.warn-on-non-countable-types

Попробуйте изменить

count($image_array)

К

count((is_countable($image_array)?$image_array:[]))

И используйте этот трюк для всех вызовов count()

тем не менее, та же самая ошибка count(): параметр должен быть массивом или объектом, который реализует Countable

Pushpendra Pal 19.03.2019 12:32

Попробуйте это: count((is_countable($image_array)?$image_array:[]))

Dmytro Huz 19.03.2019 13:29

Другие вопросы по теме