元素不是這樣做的正確方法。元素用於在多個視圖中多次呈現或顯示類似的片段。您可以將視圖中的變量傳遞給元素,但不能以其他方式傳遞。
我建議把陣列到您的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')
)
));
}
}
?>
這樣,每個視圖將有可變$districts
充滿陣列。
如果你需要做的這對每個動作的基礎上,你可以在你的AppController做到這一點:
<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
class AppController extends Controller
{
public function beforeFilter(Event $event) {
$this->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'' – gmponos
我print_r它在視圖中,它返回錯誤,指出其未定義的變量 –
不要在視圖模板中設置變量。使用你是這個控制器。請參閱下面的Lars Ebert的答案。 – drmonkeyninja