#php #laravel-5 #lumen
#php #laravel-5 #lumen
Вопрос:
Я пытался создать загрузку нескольких изображений вместе с сообщением, но я постоянно получаю ошибку в функции count при попытке подсчитать элементы в массиве. Для отдельного изображения код работает нормально, если я удаляю этот массив и подсчитываю. Последняя версия 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']);
}
}
Комментарии:
1. @karel Я использую текстовый редактор, он даст мне знать, если возникнет какая-либо неожиданная скобка или ошибка
2. @karel но это не создает проблемы для меня, проблема в функции count, когда я пытаюсь передать изображение
3. Как выглядит форма? В данный момент вы ищете
$request->file('image')
который, похоже, не является массивом. Возможно, ваша форма должна выглядеть так<input type="file" class="form-control" name="images[]" ..>
. Создайте var_dump вашего$request->file('image')
, чтобы проверить, какие данные вы получили.4. @BertMaurau Я просто создавал API, я не создавал интерфейс, который я тестирую через postman
5. @BertMaurau Я просто создавал API, я не создавал интерфейс, который я тестирую через postman после того, как вы сказали var_dump, что я пробовал, и вот что я получил object(Illuminate Http UploadedFile)#89 (7) { [«test»: «Symfony Component HttpFoundation File UploadedFile»: private] => bool(false) }
Ответ №1:
Попробуйте изменить
count($image_array)
Для
count((is_countable($image_array)?$image_array:[]))
И используйте этот трюк для всех вызовов count()
Комментарии:
1. тем не менее, та же ошибка count(): Параметр должен быть массивом или объектом, который реализует Countable
2. Попробуйте это: count((is_countable($image_array)?$image_array:[]))