Передать массив данных контроллера в элемент для home.ctp - PullRequest
1 голос
/ 04 февраля 2011

Согласно руководству и моему коду, это должно работать идеально, но это не так.Я слишком долго возился с этим кодом и хотел, чтобы кто-нибудь посмотрел на него, чтобы увидеть, есть ли что-то, чего я не вижу.

Я пытаюсь вызвать действие index () моих плановконтроллер передает массив данных элементу для отображения.Кто-нибудь знает, почему это не работает?

Я получаю общую ошибку:

Notice (8): Undefined variable: 
plans [APP/views/elements/search_dental_plans_results.ctp,  line 12]
Warning (2): Invalid argument supplied for foreach()
[APP/views/elements/search_dental_plans_results.ctp, line 12]

И вот мой код:

home.ctp

<?php echo $this->element('search_dental_plans_results'); ?>

views / elements / search_dental_plans_results.ctp

<h2>Plans List</h2>
<?php $plans = $this->requestAction('plans/index'); ?>
<?php foreach($plans as $plan): ?>
<ol>
<li><?php echo $plan['Plan']['id']; ?></li>
</ol>
<?php endforeach; ?>

controllers /plan_controller.php

function index() {
    //$plans = $this->paginate();
    if (isset($this->params['requested'])) {
        return $plans;
    } else {
        $this->set('plans', $plans);
    }
}

Ответы [ 5 ]

1 голос
/ 04 февраля 2011

Быстрый тест, чтобы увидеть, является ли это просто синтаксисом, но попробуйте добавить косую черту в функции 'requestAction'.

<?php $plans = $this->requestAction('/plans/index'); ?>
// @see - http://book.cakephp.org/view/434/requestAction

Также, просто комментируя целесообразность использования requestAction, мне лично нравитсяиспользовать его для заполнения раскрывающихся списков и массивов флажков и т. д. в элементах.Он обеспечивает чистоту кода контроллера, выделяя часть логики представления, и облегчает работу HTML-кодера.

Лучше всего работает с данными, которые не часто меняются, например со списком планов, но важно, чтобы вы кешировали запрос, иначе это может просто снизить производительность.

0 голосов
/ 05 февраля 2011

Я решил это "неожиданным" способом (по крайней мере, согласно руководству этот метод не был отмечен):

элемент

...

$planDetails = $this->requestAction('/planDetails/pd_list');
foreach ($planDetails as $planDetail) :

...

логика контроллера

function pd_list() {
return $this->PlanDetail->find('all');
}

Работает как шарм:), хотя я собираюсь использовать сдерживаемый элемент управления и кеш, когда это будет сделано, но, по крайней мере, он будет работать как положено.

Не слишком святой и проблема решена :)

0 голосов
/ 04 февраля 2011

Назначение представлений или элементов - не запрашивать данные у контроллера.Это контроллеры, которые снабжают представления данными.

Теперь ваше действие с индексом ничего не делает.Ничего не назначено $ plan, неудивительно, что вы получаете сообщение об ошибке.

0 голосов
/ 04 февраля 2011

Судя по опубликованному вами коду, не похоже, что ваша проблема вызвана чем-то в CakePHP.

Неопределенная переменная - это та, которая ранее нигде не была установлена ​​в коде.Но если ваш элемент имеет это:

<?php $plans = $this->requestAction('plans/index'); ?>
<?php foreach($plans as $plan): ?>

, это означает, что устанавливается $plan.

$ this-> requestAction () в вашем примере может вернуть что угодно, или даже вообще ничего, и переменная $plan будет по-прежнему считаться определенной, и вы не получите уведомление о неопределенной переменной.

Так что я бы попробовал поискать проблему в другом месте.Может быть, попробуйте изменить эту строку:

<?php $plans = $this->requestAction('plans/index'); ?>

на:

<?php $plans = array(1,2,3); ?>

И посмотрите, работает ли это.Также попробуйте проверить свой синтаксис.Возможно, вы где-то пропустили открывающий или закрывающий тег.

0 голосов
/ 04 февраля 2011

почему планы закомментированы и почему isset () в if?попробуйте поставить выход;перед возвратом и посмотрите, что произойдет, шансы на то, что запрашиваемое значение установлено по умолчанию, но имеют значение false, и ваш if должен быть if ($ this-> params ['required']) или if (isset ($ this-> params ['required')]) && $ this-> params ['required'])

Я также не понимаю, почему вы используете для этого действие запроса, вы почти никогда не должны использовать requestAction ()

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