CakePHP с несколькими именованными параметрами в ссылке - PullRequest
1 голос
/ 06 декабря 2011

Я использую ссылку, чтобы указать нужный мне параметр в форме на следующей странице.Вот код ссылки:

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

Целью этого является сохранение электронного письма в базе данных, а затем отправка электронного письма (оба из которых работают).

Я хочу вернутьсяна страницу, на которой они были, когда щелкали ссылку, но не знают, как получить доступ к этой модели и идентификатору после того, как они пройдут еще две страницы ...

Вот add.ctp

<div class="universities form">
<?php echo $this->Form->create('Email');?>
    <fieldset>
        <legend><?php __('Add Email'); ?></legend>
    <?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']));

    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
</div>

Реальная проблема - куда перенаправить?

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

После реализации первого ответа я получаю эти ошибки при перенаправлении (хотя электронная почта сохраняет и отправляет успешно, так что это просто проблема перенаправления).

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

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

Я бы предложил создать полный возвращаемый URI, используя:

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

Так это будет выглядеть примерно так:

$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'));

в add.ctp

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

и в контроллере электронной почты

$this->redirect('/' . str_replace('_', '/', $this->data['Email']['returnUrl']));
0 голосов
/ 07 декабря 2011

Я добавил это в 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

И затем вызвал функцию после установки переменных в моем контроллере электронной почты.(например, $ to, $ from, $ subject, $ body, $ headers)

0 голосов
/ 06 декабря 2011

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

где index - ваше действие по умолчанию, если ссылка не существует.

читать здесь

например, ваш пользователь на content/view/my-content, он нажимает emails/add, заполняет свои данные, отправляет. ссылающаяся страница - content/view/my-content, поэтому он (должен) быть перенаправлен туда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...