2014-10-12 1 views
0

Когда нажата кнопка «Редактировать» на индексном представлении, данные сначала передаются в действие «Редактирование PostsController». Так как функция «set» не вызывается внутри этого действия, как визуализируется рендеринг edit.ctp, а отредактированные данные отправляются обратно в действие «Изменить»?Учебник по блогам CakePHP Редактирование сообщений. Как представлены данные, доступные для действия редактирования?

+0

использовать отладчик/сделать трассировку. –

ответ

0

Вы должны вставить код с вашего контроллера, чтобы люди могли точно видеть, о чем вы говорите.

Предполагая, что у вас есть довольно стандартный метод редактирования, он должен содержать строки что-то вроде этого:

$this->request->data = $this->Post->read(null, $id)

Итак, $this->request->data установлен. Торт гарантирует, что все изображение $this->request доступно на представлении. В суперклассе «Вид» есть массив под названием $_passedVars, который включает, помимо прочего, request. В представлении __construct он копирует каждую переменную, названную в $_passedVars, с контроллера, на представление.

Если вы хотите, чтобы увидеть детали, проверить /lib/Cake/View/View.php, в частности, в $_passedVars переменную, и первые несколько строк __construct метода:

/** 
* List of variables to collect from the associated controller. 
* 
* @var array 
*/ 
    protected $_passedVars = array(
     'viewVars', 'autoLayout', 'ext', 'helpers', 'view', 'layout', 'name', 'theme', 
     'layoutPath', 'viewPath', 'request', 'plugin', 'passedArgs', 'cacheAction' 
    ); 

и

/** 
* Constructor 
* 
* @param Controller $controller A controller object to pull View::_passedVars from. 
*/ 
    public function __construct(Controller $controller = null) { 
     if (is_object($controller)) { 
      $count = count($this->_passedVars); 
      for ($j = 0; $j < $count; $j++) { 
       $var = $this->_passedVars[$j]; 
       $this->{$var} = $controller->{$var}; 
      } 
      $this->_eventManager = $controller->getEventManager(); 
     } 
     if (empty($this->request) && !($this->request = Router::getRequest(true))) { 
      $this->request = new CakeRequest(null, false); 
      $this->request->base = ''; 
      $this->request->here = $this->request->webroot = '/'; 
     } 
     if (is_object($controller) && isset($controller->response)) { 
      $this->response = $controller->response; 
     } else { 
      $this->response = new CakeResponse(); 
     } 
     $this->Helpers = new HelperCollection($this); 
     $this->Blocks = new ViewBlock(); 
     $this->loadHelpers(); 
     parent::__construct(); 
    } 
Смежные вопросы