setFlash() может "не работать" для конечной странице (на, той куда должен был попасть пользователь ), если на странице, где вызывался ридирект ваш метод всё-таки выполняется -- а значит сообщение как бы уже выставлялось для этого метода.
Возможное решение
Если вы используете beforeAction(), то отдельно делайте редирект и отдельно явно возвращайте false, в случае если метод перед которым делается проверка выполнять не нужно: