2010-11-23 10 views
5

quiero definir mundial matriz constante códigoDefinir constante de matriz global para usar en vista

en Bootstrap.php

$adv_types = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее');

código en el archivo de vista

echo $form->input('Adv.type', array('type' => 'select', 'option' => $adv_types, 'label' => 'Место рекламы'));

pero cakephp da error:

"Undefined variable: adv_types"

+0

si lo está utilizando para las opciones de formulario (como parece), es posible que desee utilizar algo como: http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/ – mark

Respuesta

5

Estos deben establecer en su app_controller.php, y luego pasó a sus puntos de vista

// app_controller.php 
class AppController extends Controller { 
     var $adv_types = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее'); 
     function beforeFilter() { 
      $this->set('adv_types', $this->adv_types); 
     } 
} 

Para mí, Bootstrap.php no es el archivo correcto para esta constante

+0

¿Hay alguna manera de hacer esta matriz desde AppModel si esta matriz es dinámica desde la base de datos? –

8

Por desgracia, las posibilidades de bootstrap.php es bootstrap.php, por lo que la variable $adv_types quedará fuera de alcance tan pronto como PHP complete el análisis bootstrap.php.

Existen varios enfoques que puede tomar, según sus necesidades reales.

Solución 1: se necesitan estas variables en muchos de sus puntos de vista

Si necesita la variable que esté disponible en todos los puntos de vista, se debe definir y establecer en AppController::beforeRender().

En app/app_controller.php:

class AppController extends Controller 
{ 

    function beforeRender() 
    { 
     parent::beforeRender(); 

     $adv_types = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее'); 
     $this->set(compact('adv_types')); 
    } 
} 

Esto permitirá que ninguna de sus puntos de vista para acceder a la matriz $adv_types.

Solución 2: es posible que tenga acceso a esta variable en cualquier lugar dentro de su aplicación CakePHP

Si tiene que acceder a la variable $adv_types otras partes de su aplicación, puede agregarlo a la colección Configure. En bootstrap.php:

Configure::write('NameOfYourAppAsNamespace.adv_types', array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее')); 

le recomiendo usar el nombre de su proyecto como un pseudo espacio de nombres; adv_types es poco probable que entre en conflicto con otros identificadores, pero si comienzas a utilizar este enfoque con más frecuencia, tus posibilidades de crear conflictos aumentan. Además, esto le permite agrupar los datos que está almacenando en la colección Configure bajo un espacio de nombre, que puede ser útil para la depuración.

De todos modos, este enfoque le permitirá acceder a la variable en cualquier ámbito bajo el paraguas de CakePHP, invocando Configure::read().Por lo tanto:

$adv_types = Configure::read('NameOfYourAppAsNamespace.adv_types'); 

Solución 3: es absolutamente necesario tener esta variable disponible como una variable global

Si absolutamente necesario tener esto como una variable global estándar de PHP, se puede hacer lo siguiente:

$GLOBALS['adv_types'] = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее'); 

Antes de hacer esto, por favor considerar si esto es estrictamente necesario. Las variables globales son un negocio realmente desordenado, y debe tener un claro y presente necesita para justificarlo.


Editar/Actualizar!

Treinta segundos en Google Translate me han llevado a descubrir que su matriz contiene traducciones correspondientes a las claves. Es posible que desee investigar utilizando las características de CakePHP Internationalization & Localization para abstraer la distinción entre los términos en inglés y ruso para arriba/izquierda/derecha/abajo (y todo lo demás).

+0

gracias a Daniel por las soluciones, pero esto no es para la traducción, es solo definir el tipo de lugar adv. – baur79

Cuestiones relacionadas