То, как я диагностирую приложение CakePHP, всунуло цикл перенаправления?

Одной из причин усталости является то, что вы пытались пойти на убийство, прежде чем приступить к бойне. Приведенное ниже решение заняло час, чтобы подготовиться и 10 минут, чтобы закодировать. Вставьте весь код в стандартный модуль кода и вызовите функцию MatchRow либо из окна Immediate (? MatchRow), либо из собственного кода, как показано ниже в тестовом процессе.

Option Explicit

Enum Nws                            ' worksheet navigation
    ' 01 Mar 2019
    NwsCriteriaRow = 3
    NwsList = 1                     ' Columns: (1 = A)
    NwsID = 3
    NwsNumber                       ' (undefined: assigns next integer)
End Enum

Function MatchRow() As Long
    ' 01 Mar 2019
    ' return 0 if not found

    Dim Ws As Worksheet
    Dim Rng As Range
    Dim R As Long

    ' The ActiveWorkbook isn't necessarily ThisWorkbook
    Set Ws = ActiveWorkbook.Worksheets("Sheet2")        ' replace tab's name here
    With Ws
        Set Rng = .Range(.Cells(NwsCriteriaRow, NwsList), .Cells(.Rows.Count, NwsList).End(xlUp))
        R = FindRow(.Cells(NwsCriteriaRow, NwsID).Value, Rng, True)

        If R Then                                       ' skip if no match was found
            Set Rng = .Cells(R + 1, NwsID)
            Set Rng = .Range(Rng, Rng.End(xlDown))
            MatchRow = FindRow(.Cells(NwsCriteriaRow, NwsNumber).Value, Rng)
        End If
    End With
End Function

Private Function FindRow(Crit As Variant, _
                         Rng As Range, _
                         Optional ByVal SearchFromTop As Boolean) As Long
    ' 01 Mar 2019
    ' return 0 if not found

    Dim Fun As Range
    Dim StartCell As Long

    With Rng
        If SearchFromTop Then
            StartCell = 1
        Else
            StartCell = .Cells.Count
        End If

        Set Fun = .Find(What:=Crit, _
                       After:=.Cells(StartCell), _
                       LookIn:=xlValues, _
                       LookAt:=xlWhole, _
                       MatchCase:=False)
    End With

    If Not Fun Is Nothing Then FindRow = Fun.Row
End Function

Функция MatchRow возвращает номер строки Sheet2, где D3 найден, ища только ту часть столбца D, которая принадлежит списку, указанному в C3. Функция возвращает 0, если совпадений не найдено ни в списке, ни в ID.

Вы не указали, что вы хотите сделать с найденным рядом. Процедура ниже вернет данные из этой строки. Вместо этого вы можете использовать возможность адресации ячеек для записи в них.

Private Sub RetrieveData()

    Dim R As Long

    R = MatchRow
    MsgBox "ID = " & Cells(R, NwsID).Value & vbCr & _
           "Number = " & Cells(R, NwsNumber).Value
End Sub

Будучи предназначенным для тестирования только вышеупомянутого процесса, он не определяет рабочий лист и, следовательно, возвращает данные из ActiveSheet, предположительно Sheet2.

5
задан Chuck Burgess 18 January 2013 в 23:20
поделиться

1 ответ

Ваш / app / app_controller должен иметь beforeFilter () метод со всеми поведениями компонента Auth . Одним из таких способов поведения является отправка, когда пользователь не вошел в систему.

вы будете искать что-то вроде:

// If cake should redirect automatically or you will do it in the User.login()
$this->Auth->autoRedirect = true; 
// And if the autoRedirect is true, where to redirect
$this->Auth->loginRedirect = '/user/login';

G'luck

6
ответ дан 18 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

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