Проверьте, существует ли запись в наборе VB6?

Попробуйте передать его в view с помощью метода with и сделать переменную user защищенной:

protected $user;

public function build()
{
    return $this->view('emails.user.updated')->with(['username' => $this->user->username]);
}

И тогда вы сможете получить к ней доступ, например, {{ $username }}.

18
задан user4315 2 September 2008 в 21:00
поделиться

7 ответов

@Mark Biek Ваш keyExists тесно соответствует моему стандарту, Существует () функция. Для создания класса более полезным для COM-выставленных наборов и проверяющий на числовые индексы я рекомендовал бы изменить sKey и myCollection, который не будет введен. Если функция будет используемой с набором объектов, 'набор' требуется (на строке, где val установлен).

РЕДАКТИРОВАНИЕ : Это прослушивало меня, что я никогда не замечал различных требований для основанного на объектах, и основанное на значении Существует () функция. Я очень редко использую наборы для необъектов, но это казалось таким идеальным узким местом для ошибки, которую будет настолько трудно разыскать, когда я должен был проверить на существование. Поскольку обработка ошибок перестанет работать, если обработчик ошибок будет уже активен, две функции требуются, чтобы получать новый ошибочный объем. Только Существование () функция должно когда-либо быть названным:

Public Function Exists(col, index) As Boolean
On Error GoTo ExistsTryNonObject
    Dim o As Object

    Set o = col(index)
    Exists = True
    Exit Function

ExistsTryNonObject:
    Exists = ExistsNonObject(col, index)
End Function

Private Function ExistsNonObject(col, index) As Boolean
On Error GoTo ExistsNonObjectErrorHandler
    Dim v As Variant

    v = col(index)
    ExistsNonObject = True
    Exit Function

ExistsNonObjectErrorHandler:
    ExistsNonObject = False
End Function

И проверить функциональность:

Public Sub TestExists()
    Dim c As New Collection

    Dim b As New Class1

    c.Add "a string", "a"
    c.Add b, "b"

    Debug.Print "a", Exists(c, "a") ' True '
    Debug.Print "b", Exists(c, "b") ' True '
    Debug.Print "c", Exists(c, "c") ' False '
    Debug.Print 1, Exists(c, 1) ' True '
    Debug.Print 2, Exists(c, 2) ' True '
    Debug.Print 3, Exists(c, 3) ' False '
End Sub
21
ответ дан 30 November 2019 в 05:49
поделиться

Я всегда делал это с функцией как это:

public function keyExists(myCollection as collection, sKey as string) as Boolean
  on error goto handleerror:

  dim val as variant

  val = myCollection(sKey)
  keyExists = true
  exit sub
handleerror:
  keyExists = false
end function
7
ответ дан 30 November 2019 в 05:49
поделиться

Как указано Thomas, необходимо Установить объект вместо Позволенного. Вот общая функция из моей библиотеки, которая работает на значение и типы объектов:

Public Function Exists(ByVal key As Variant, ByRef col As Collection) As Boolean

'Returns True if item with key exists in collection

On Error Resume Next

Const ERR_OBJECT_TYPE As Long = 438
Dim item As Variant

'Try reach item by key
item = col.item(key)

'If no error occurred, key exists
If Err.Number = 0 Then
    Exists = True

'In cases where error 438 is thrown, it is likely that
'the item does exist, but is an object that cannot be Let
ElseIf Err.Number = ERR_OBJECT_TYPE Then

    'Try reach object by key
    Set item = col.item(key)

    'If an object was found, the key exists
    If Not item Is Nothing Then
        Exists = True
    End If

End If

Err.Clear

End Function

, Равно как и рекомендовал Thomas, можно изменить тип Набора для Возражения для обобщения этого..Item (ключ), синтаксис совместно используется большинством классов набора, так, чтобы могло бы на самом деле быть полезным.

РЕДАКТИРОВАНИЕ Кажется, что я был избит к перфорации несколько самим Thomas. Однако для более легкого повторного использования я лично предпочитаю единственную функцию без частных зависимостей.

5
ответ дан 30 November 2019 в 05:49
поделиться

Используя обработчик ошибок для ловли случаев, когда ключ не делает, существует в Наборе, может сделать отладку с "повреждением на всех ошибках" опция довольно раздражающий. Для предотвращения нежелательных ошибок, я довольно часто создаю класс, который имеет хранившие объекты в Наборе и всех ключах в Словаре. Словарь имеет, существует (ключ) - функция, таким образом, я могу назвать это прежде, чем попытаться получить объект от набора. Можно только сохранить строки в Словаре, таким образом, Набор все еще необходим, если необходимо хранить объекты.

3
ответ дан 30 November 2019 в 05:49
поделиться

Лучшим решением было бы написать функцию TryGet. Много времени вы собираетесь проверять, а затем получать предмет. Экономьте время, делая это одновременно.

public Function TryGet(key as string, col as collection) as Variant
  on error goto errhandler
  Set TryGet= col(key)
  exit function
errhandler:
  Set TryGet = nothing  
end function
2
ответ дан 30 November 2019 в 05:49
поделиться

Моя стандартная функция очень проста. Это будет работать независимо от типа элемента, поскольку при этом не нужно выполнять какие-либо присваивания, он просто выполняет get свойства коллекции.

Public Function Exists(ByVal oCol As Collection, ByVal vKey As Variant) As Boolean

    On Error Resume Next
    oCol.Item vKey
    Exists = (Err.Number = 0)
    Err.Clear

End Function
27
ответ дан 30 November 2019 в 05:49
поделиться

см. http://www.visualbasic.happycodings.com/Other/code10.html реализация здесь имеет то преимущество, что также необязательно возвращает найденный элемент и работает с объектными / собственными типами (согласно комментариям).

воспроизведено здесь, поскольку ссылка больше не доступна:

Определить, существует ли элемент в коллекция

В следующем коде показано, как определить, существует ли элемент в коллекции.

Option Explicit

'Purpose     :  Determines if an item already exists in a collection
'Inputs      :  oCollection         The collection to test for the existance of the item
'               vIndex              The index of the item.
'               [vItem]             See Outputs
'Outputs     :  Returns True if the item already exists in the collection.
'               [vItem] The value of the item, if it exists, else returns "empty".
'Notes       :
'Example     :

Function CollectionItemExists(vIndex As Variant, oCollection As Collection, Optional vItem As Variant) As Boolean
    On Error GoTo ErrNotExist

    'Clear output result
    If IsObject(vItem) Then
        Set vItem = Nothing
    Else
        vItem = Empty
    End If

    If VarType(vIndex) = vbString Then
        'Test if item exists
        If VarType(oCollection.Item(CStr(vIndex))) = vbObject Then
            'Return an object
            Set vItem = oCollection.Item(CStr(vIndex))
        Else
            'Return an standard variable
            vItem = oCollection.Item(CStr(vIndex))
        End If
    Else
        'Test if item exists
        If VarType(oCollection.Item(Int(vIndex))) = vbObject Then
            'Return an object
            Set vItem = oCollection.Item(Int(vIndex))
        Else
            'Return an standard variable
            vItem = oCollection.Item(Int(vIndex))
        End If
    End If
    'Return success
    CollectionItemExists = True
    Exit Function
ErrNotExist:
    CollectionItemExists = False
    On Error GoTo 0
End Function

'Demonstration routine
Sub Test()
    Dim oColl As New Collection, oValue As Variant

    oColl.Add "red1", "KEYA"
    oColl.Add "red2", "KEYB"
    'Return the two items in the collection
    Debug.Print CollectionItemExists("KEYA", oColl, oValue)
    Debug.Print "Returned: " & oValue
    Debug.Print "-----------"
    Debug.Print CollectionItemExists(2, oColl, oValue)
    Debug.Print "Returned: " & oValue
    'Should fail
    Debug.Print CollectionItemExists("KEYC", oColl, oValue)
    Debug.Print "Returned: " & oValue
    Set oColl = Nothing
End Sub
2
ответ дан 30 November 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: