CakePHP Meerdere benoemde parameters in Link

Ik gebruik een link om een ​​parameter te benoemen die ik nodig heb in een formulier op de volgende pagina. Hier is de linkcode:

    echo $this->Html->link('Email', array('controller' => 'emails', 'action' => 'add', 'contact_email' => $model), array('class' => 'button add'));

Het doel hiervan is om een ​​e-mail op te slaan in de database en vervolgens de e-mail te verzenden (beide werken).

Ik wil terugkeren naar de pagina waarop ze stonden toen ze op de link klikten, maar ik weet niet hoe ik toegang moet krijgen tot dat model en id nadat ze twee pagina's hebben bekeken ...

Hier is add.ctp

<div class="universities form">
<?php echo $this->Form->create('Email');?>
    
<?php __('Add Email'); ?> <?php echo $this->Form->input('subject'); echo $this->Form->input('email_text'); echo $this->Form->hidden('email', array('value' => $this->params['named']['contact_email'])); echo $this->Form->hidden('user_from', array('value' => $this->Session->read('User.id'))); echo $this->Form->hidden('created', array('value' => date("Y-m-d"))); echo $this->Form->hidden('modified', array('value' => date("Y-m-d"))); echo $this->Form->hidden('model', array('value' => $this->params['named']['model'])); ?>
<?php echo $this->Form->end(__('Submit', true));?> </div>

Het echte probleem - waar doorverwijzen?

$this->redirect(array('controller' => $this->data['Email']['model'], 'action' => 'view', $this->data['model']['id']));

Na het implementeren van antwoord één, krijg ik deze fouten op redirect (e-mail slaat op en verzendt het met succes, dus het probleem is alleen maar omleiden).

Notice (8): Undefined property: Email::$enabled [CORE/cake/libs/controller/component.php, line 142]
Code | Context
            $component =& $this->_loaded[$name];

            if ($component->enabled === true && method_exists($component, 'beforeRedirect')) {
Component::beforeRedirect() - CORE/cake/libs/controller/component.php, line 142
Controller::redirect() - CORE/cake/libs/controller/controller.php, line 678
EmailsController::add() - APP/controllers/emails_controller.php, line 54
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 204
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171
[main] - APP/webroot/index.php, line 83
Warning: mkdir() [http://php.net/function.mkdir]: Permission denied in /Users/jwg2s/Sites/fundvista/cake/libs/folder.php on line 498
Warning (2): Cannot modify header information - headers already sent by (output started at /Users/jwg2s/Sites/fundvista/cake/libs/debugger.php:673) [CORE/cake/libs/controller/controller.php, line 742]
Code | Context
header - [internal], line ??
Controller::header() - CORE/cake/libs/controller/controller.php, line 742
Controller::redirect() - CORE/cake/libs/controller/controller.php, line 721
EmailsController::add() - APP/controllers/emails_controller.php, line 54
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 204
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171
[main] - APP/webroot/index.php, line 83
Warning: mkdir() [http://php.net/function.mkdir]: Permission denied in /Users/jwg2s/Sites/fundvista/cake/libs/folder.php on line 498
1

3 antwoord

Wat ik zou willen voorstellen, is om een ​​volledige return-URI te bouwen met behulp van:

$this->params['controller']
$this->params['action'];
$this->params['pass'];

Dus het zou er ongeveer zo uitzien:

$returnUrl = $this->params['controller'] . '/' . $this->params['action'] . '/' . implode('/', $this->params['pass']);
// let's also replace the slashes with, say, underscores
$returnUrl = str_replace('/', '_', $returnUrl);

echo $this->Html->link('Email', array('controller' => 'emails', 'action' => 'add', 'contact_email' => $model, 'returnUrl' => $returnUrl), array('class' => 'button add'));

in add.ctp

echo $this->Form->hidden('returnUrl', array('value' => $this->params['named']['returnUrl']));

en in de controller van e-mail

$this->redirect('/' . str_replace('_', '/', $this->data['Email']['returnUrl']));
2
toegevoegd
plus 1 omdat onderstreping van stenen
toegevoegd de auteur YAMM, de bron

$this->redirect($this->referer(array('action' => 'index')));

waarbij index uw standaardactie is als de verwijzende link niet bestaat.

Lees hier

bijvoorbeeld uw gebruiker staat op inhoud/weergave/mijn-inhoud , hij klikt op e-mails/voeg toe, vult zijn gegevens in, verzendt. de verwijzende pagina is content/view/my-content , dus hij (zou) daar terug moeten worden doorgestuurd.

0
toegevoegd
De actie waar ze uit zouden komen zou zicht zijn, dus zou ik index met weergave moeten vervangen?
toegevoegd de auteur jwg2s, de bron
Heeft u gewoon een fout toegevoegd aan die omleiding die kan helpen?
toegevoegd de auteur jwg2s, de bron

Ik heb dit toegevoegd aan app_controller.php:

public function sendEmail($to,$from,$subject,$body,$headers=array(),$save_to_db=true)
    {
        if($save_to_db == true)
        {
            //do model crap here
            $this->Email->create();

            $data = array(
                'email' => $to,
                'subject' => $subject,
                'email_text' => $body,
                'user_from' => $from,
           //map fields here
            );
            if($this->Email->save($data) == false) 
            {
                $this->log("Email to '$to' from '$from' with subject '$subject' failed to save into the database!");
            }
        }//end save to db

        $email = new EmailComponent();
        //$email->startup($this);

        //reeset email component
        $email->reset();


        /* SMTP Options */
        $email->smtpOptions = array(
            'port'=>'25', 
            'timeout'=>'30',
            'host' => 'smtp.gmail.com',
            'username'=>'###########',
            'password'=>'###########',
        );

        /* Set delivery method */
        //$email->delivery = 'smtp';
        $email->from = $from;
        $email->to = $to;
        $email->subject = $subject;
        $email->replyTo = $from;
        $email->from = '############ <' . $subject . '>';
        $email->sendAs = 'html'; //Send as 'html', 'text' or 'both' (default is 'text')

        $success = $email->send($this->data['Email']['email_text']);
        if($success == false)
        {
            $this->log("Email to '$to' from '$from' with subject '$subject' failed to send!");
        }

        return true;
    }//end sendEmail

En vervolgens de functie gebeld na het instellen van variabelen in mijn e-mailcontroller. (bijvoorbeeld het $ to, $ from, $ subject, $ body, $ headers)

0
toegevoegd