php 从MessageBag中删除消息

xfyts7mz  于 2023-02-11  发布在  PHP
关注(0)|答案(3)|浏览(98)

如何从MessageBag中删 debugging 误消息?
我一直试图从MessageBag使用的消息数组中删除一个特定的元素,但没有成功。
我两次收到相同的错误消息。

@if($errors->has('undefined'))
    <div class="alert alert-warning">
    <button type="button" class="close" data-dismiss="alert">&times;</button>
    <h4>Failure.</h4>
        {{ $errors->first('undefined') }}
    </div>
    <?
        // $messages = $errors->getMessages();
        $messages = $errors->toArray();
        unset($messages['undefined']);
    ?>
@endif

@if($errors->any())
    <div class="alert alert-error">
    <button type="button" class="close" data-dismiss="alert">&times;</button>
    <h4>Error!</h4>
        {{ $errors->first() }}
    </div>
@endif

编辑

我做过类似的事情,看起来很有效。

<?
    $messages = $errors->toArray();
?>

        @if(array_key_exists('undefined', $messages))
            <?
                $message_array = $messages['undefined'];
                $message = $message_array[0];
                unset($messages['undefined']);
            ?>

            <div class="alert alert-warning">
            <button type="button" class="close" data-dismiss="alert">&times;</button>
            <h4>Failure.</h4>
                {{ $message }}
            </div>
        @endif

        <?
            foreach ($messages as $error => $error_array) { 
        ?>
            <div class="alert alert-error">
            <button type="button" class="close" data-dismiss="alert">&times;</button>
            <h4>Error!</h4>
                {{ $error_array[0] }}
            </div>
         <?
            }
         ?>

但我的问题仍然存在?为什么会发生这种情况?
是否与Session有关?我知道errors变量存储在Session中。

sxissh06

sxissh061#

http://laravel.com/api/class-Illuminate.Support.MessageBag.html
不幸的是,Laravel没有提供从MessageBag示例中删 debugging 误的方法。你可以做的是将“undefined”错误设置为一个变量,这样它就不会出现在MessageBag中,只需使用类似的逻辑来显示/隐藏它。
return View::make('test.view')->with('undefined', 'Something is undefined')->withInput($input)->withErrors($validator);
通过引用传递示例。您可以修改MessageBag类以使其通过引用传递,但这将是一种黑客行为。

<?php
class foo 
{
    public $value = 42;

    public function &getValue() 
    {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$myValue = 2;

echo $obj->getValue();                // prints the new value of $obj->value, i.e. 2.
?>

请注意,&被添加到函数名和调用的前面。

y53ybaqx

y53ybaqx2#

我为此打开了一个PR,它被合并了。从Laravel 10开始,remove方法被添加到MessageBag中,你可以:

$validationErrors = $validator->errors();
$validationErrors->remove('key');
c9x0cxw0

c9x0cxw03#

我遇到了同样的问题,我知道我可以重新创建MessageBag,也可以使用->getMessages()访问当前MessageBag的错误。

$validationErrors = $validator->errors()->getMessages();
unset($validationErrors['email']);
unset($validationErrors['phone_number']);

$newValidationErrors = new MessageBag($validationErrors);

希望这能帮上忙

相关问题