How does $hook->addError work in Login > postHooks?

I want to output custom error messages based on certain criteria in my postHooks snippet. I’m not getting them to display in my frontend tho. How does that work?

I’ve tried variations like:

$hook->addError('custom', $errorMessage);
$hook->addError('login', $errorMessage);
$hook->addError('user', $errorMessage);

In my &loginTpl i have the placeholder: [[+errors]]

and in my &errTpl i have tried:
<p class="error">[[+error]], [[+error.fieldname]], etc.</p>

without luck so far.

If you add $hook->addError('custom', $errorMessage); in a posthook, the code should set the placeholders [[!+error.custom]] and [[!+error.message]] (if the default value for “errorPrefix” is used):


The error template (&errTpl) doesn’t seem to get used, when the error only occurs in the posthook.

Thanks @halftrainedharry – that works.

However, my error log is filling up with this on login:

/core/components/login/model/login/loginhooks.class.php : 183) PHP warning: Undefined array key "custom"
/core/components/login/model/login/loginhooks.class.php : 137) PHP warning: Undefined array key "loginCheckUsergroupMember"

On logout my postHook seems to fire too, causing my error log to fill up even more:

core/cache/includes/elements/modx/revolution/modsnippet/108.include.cache.php : 52) No username provided in request.
core/components/login/model/login/loginhooks.class.php : 183) PHP warning: Undefined array key "custom"
core/components/login/model/login/loginhooks.class.php : 137) PHP warning: Undefined array key "loginCheckUsergroupMember"
core/components/login/controllers/web/Login.php : 511) [Login] Post-Hook errors: Array
(
    [custom] => Bitte geben Sie einen Benutzernamen an.
    [loginCheckUsergroupMember] =>  
)

core/components/login/controllers/web/Login.php : 514) [Login] Post-Hook error: Bitte geben Sie einen Benutzernamen an.

my postHook snippet (loginCheckUsergroupMember, id 108):

<?php
$modx = $hook->modx;
$resID = $modx->resource->get('id');

if (!empty($_REQUEST['username'])) {

    $username = $modx->sanitizeString($_REQUEST['username']);
    $user = $modx->getObject('modUser', array('username' => $username));
    
    if ($user) {

        $userGroups = $user->getUserGroups();
        $userGroup = implode(', ', $userGroups);
        

        if ($resID == 4) {

        	if (in_array('2', $userGroups)) {
        		$modx->sendRedirect($modx->makeUrl(5));
        		return true;
        	}

        	if (in_array('3', $userGroups)) {
        		$hook->addError('custom', 'Der eingegebene Benutzername ist für Benutzergruppe 3 registriert, nicht für Benutzergruppe 2.');
        		return false;
        	}

        }


        else if ($resID == 13) {

        	if (in_array('3', $userGroups)) {
        		$modx->sendRedirect($modx->makeUrl(14));
        		return true;
        	}

        	if (in_array('2', $userGroups)) {
        		$hook->addError('custom', 'Der eingegebene Benutzername ist für Benutzergruppe 2 registriert, nicht für Benutzergruppe 3.');
        		return false;
        	}
        }
        
        
    } else {
        $modx->log(modX::LOG_LEVEL_ERROR, 'User not found with username: ' . $username);
        $hook->addError('custom', 'Ein Benutzer mit dem Benutzernamen '.$username. ' wurde nicht gefunden.');
        return false;
    }
} else {
    $modx->log(modX::LOG_LEVEL_ERROR, 'No username provided in request.');
    $hook->addError('custom', 'Bitte geben Sie einen Benutzernamen an.');
    return false;
}

This topic was automatically closed 2 days after discussion ended and a solution was marked. New replies are no longer allowed. You can open a new topic by clicking the link icon below the original post or solution and selecting “+ New Topic”.