在CakePHP中将变量从元素传递到视图
我有一个庞大的数组,用于多个视图,因此我将其存储在元素文件中,并在需要时获取它:在CakePHP中将变量从元素传递到视图,cakephp,Cakephp,我有一个庞大的数组,用于多个视图,因此我将其存储在元素文件中,并在需要时获取它: element/select.ctp: $districts = array( __('Region A') => array( __('district 1') => __('district 1'), __('district 2') => __('district 1'), __('district 3') => __('dist
element/select.ctp
:
$districts = array(
__('Region A') => array(
__('district 1') => __('district 1'),
__('district 2') => __('district 1'),
__('district 3') => __('district 1')
),
__('Region B') => array(
__('district 4') => __('district 4'),
__('district 5') => __('district 5'),
__('district 6') => __('district 6')
)
);
echo $this->element('select');
echo $this->Form->Create('Profile');
echo $this->Form->input('district', array(
'options' => $districts
);
我将其包含在profiles/add.ctp
中:
$districts = array(
__('Region A') => array(
__('district 1') => __('district 1'),
__('district 2') => __('district 1'),
__('district 3') => __('district 1')
),
__('Region B') => array(
__('district 4') => __('district 4'),
__('district 5') => __('district 5'),
__('district 6') => __('district 6')
)
);
echo $this->element('select');
echo $this->Form->Create('Profile');
echo $this->Form->input('district', array(
'options' => $districts
);
但是变量没有被传递。我想知道如何从元素传递它?元素不是这样做的正确方法。元素用于在多个视图中多次呈现或显示类似的代码段。可以将变量从视图传递到元素,但不能反过来传递 我建议您将阵列放入AppController,如下所示:
<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
class AppController extends Controller
{
public function beforeFilter(Event $event) {
$this->set('districts', array(
__('Region A') => array(
__('district 1') => __('district 1'),
__('district 2') => __('district 1'),
__('district 3') => __('district 1')
),
__('Region B') => array(
__('district 4') => __('district 4'),
__('district 5') => __('district 5'),
__('district 6') => __('district 6')
)
));
}
}
?>
然后将阵列传递给控制器中所需的每个视图:
<?php
namespace App\Controller;
class SomeController extends AppController
{
public function index() {
$this->set('districts', $this->districts);
}
}
?>
您是否可以尝试返回$distrincts
我在视图中打印它,它返回一个错误,说明它是一个未定义的变量不要在视图模板中设置变量。使用您的控制器进行此操作。请看下面Lars Ebert的回答。谢谢。如果我在AppController和(比如)ProfileController之间创建一个类的中间层来存储数组,会导致更少或更多的工作负载吗?因为只有某些控制器需要变量。我认为在AppController和ProfileController之间创建类没有问题,只要中间控制器仍然继承AppController。还要确保betweenControllers beforeFilter方法使用parent::beforeFilter($event)调用AppController beforeFilter方法代码>位于beforeFilter方法的开头。