Проверьте входной массив, если он пустой или нет - Laravel 5.4 - PullRequest
2 голосов
/ 12 мая 2019

У меня вход выглядит так.

{!! Form::text('inventory[0][amount]', null, ['class'=>'form-control']) !!}
{!! Form::text('inventory[0][expiry_date]', null, ['data-format'=>'D, dd MM yyyy', 'class'=>'form-control']) !!}

print_r( $_POST ) результаты

[inventory] => Array ( [0] => Array ( [amount] => 66 [expiry_date] => 2019/05/20 ) )

Я пытаюсь проверить, не являются ли amount и expiry_datenull

if ( $input['inventory[0][amount]'] and $input['inventory[0][expiry_date]'] != null )

Получил

Неопределенный индекс: инвентарь [0] [количество]

Ответы [ 4 ]

3 голосов
/ 12 мая 2019

Попробуйте так с !empty(),

if (!empty($_POST['inventory'][0]['amount']) && !empty($_POST['inventory'][0]['expiry_date']))
{ 
    //You code goes here
}
2 голосов
/ 12 мая 2019

Вы можете использовать точечную запись и $request->filled($keys) для достижения этой цели ...

$request->filled(['inventory.0.amount', 'inventory.0.expiry_date'])

Вернет true, если сумма и expiry_date присутствуют и не пусты.

Например, если вы хотите выполнить проверку в вашем контроллере ...

use Illuminate\Http\Request;

// ...

class YourController extends Controller
{
    public function store(Request $request)
    {
        if ($request->filled(['inventory.0.amount', 'inventory.0.expiry_date'])) {
            // Both amount and expiry_date are present and not empty...
            // You can also use the request() helper if you don't want inject the Request class...
        }
    }
}

Я бы также предположил, что если у вас нет нескольких предметов инвентаря, т.е. inventory[n]['amount'] - вы меняете имя ввода на inventory[amount].

Это означает, что вы можете делать следующее:

$request->filled('inventory.amount') // or (isset($input['inventory']['amount']) && ! empty($input['inventory']['amount']))

Редактировать

filled() был введен в 5.5, его следует заменить на has() в 5.4.

0 голосов
/ 12 мая 2019

В этом массиве нет ключа с именем 'inventory[0][amount]', поэтому он будет проверен следующим образом:

if(array_key_exists('inventory',$input) &&  
     array_key_exists(0,$input['inventory'])  &&  
     array_key_exists('amount',$input['inventory'][0])  && 
       !empty($input['inventory'][0]['amount'])
//add for expiry too
 ){

}
0 голосов
/ 12 мая 2019

Вы не используете ключ массива должным образом, замените ваш код на

$arr = array(
 'inventory' => Array (
  0 => Array (
     'amount' => 66,
     'expiry_date' => '2019/05/20'
  ) 
 )
);

if($arr['inventory'][0]['amount'] and $arr['inventory'][0]['expiry_date'] != ''){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...