2013-05-09 20 views
7

Devo dichiarare costanti che sono disponibili ovunque nell'applicazione. In Zend Framework 1 Abbiamo usato per dichiarare application.ini come:zend framework 2 constants

constants.NAME_TITLE = "User Name", 

Dove e come possiamo farlo in Zend Framework 2?

+1

Quale uso fanno queste costanti hanno? Dove li usano? – Sam

+0

Come lo faresti senza un framework? Se solo esistesse una funzione che ti permettesse di definire le costanti. – Crisp

+0

@Sam Queste costanti devono definire variabili globali che ho impostato in configurazione per es. LINK_TO_SOAP_SERVICE, i loro valori sono diversi per ambienti diversi. Quindi li ho posizionati in un unico posto e li uso in tutto il progetto. – user2367458

risposta

8

Ho trovato la soluzione here. Devi creare una classe di memoria in Modello. In quella classe puoi creare tutte le costanti che vuoi.

<?php 
namespace Application\Model; 
class Application { 
    const EMAIL = '[email protected]'; 
} 

Ora è possibile accedervi ovunque da:

NameOfModule\Model\NameOfModel::NAMEOFCONSTANT 

Così si può per esempio stampare la costante in una vista del genere:

<?php echo Application\Model\Application::EMAIL; ?> 
+0

Grazie per questo! Sto anche posizionando gli array li serializzando: http://stackoverflow.com/questions/1290318/php-constants-containing-arrays Riduce un sacco di codice duplicato nei moduli! – Armfoot

+0

const UPLOAD_PATH = getcwd(). '/ Public/uploads /'; perché questo sta generando un errore? – anil

-1

È possibile anche scrivere funzioni e variabili a cui è possibile accedere in qualsiasi punto dell'applicazione, ad esempio controller, modello e viste.

<?php 
namespace Webapp; 

class ControllerName 
    { 
     const EMAIL  = '[email protected]'; 

     public static function myFunction() 
      { 
      echo "doing work well."; 
      } 
    } 

ed è possibile accedere a questa funzione di classe e proprietà come

<?php echo Webapp\ControllerName::EMAIL; ?> 

e

<?php echo Webapp\ControllerName::myFunction(); ?> 
+0

Ciò che hai detto è tecnicamente corretto.Per motivi di chiarezza, normalmente nessuno dovrebbe mettere costanti e metodi statici in un controller (a meno che non si tratti di un caso raro in cui possono appartenere da nessuna parte eccetto che in quel controller) – evilReiko

1

Per Zend Framework 2, una soluzione alternativa.

è possibile definire la variabile globale all'interno config/autoload/local.php

'array_name' => array(
     'variable_name' => value, 
), 

e usarlo ovunque proprio come:

$this->config = $obj->getServiceLocator()->get('config'); //create config object 
$this->you_variable = $this->config['arrayname']['variable_name']; // fetch value 
echo $this->you_variable; // print value 
+0

che cos'è $ obj? non pensi che darà errore? – user3542450

+0

Se si utilizza PHP 5.4 o versioni successive, è possibile farlo in 1 riga, in questo modo: 'echo $ obj-> getServiceLocator() -> get ('config') ['arrayname'] ['variable_name']; ' – evilReiko

0

È possibile definire, assegnare e accesso costante come segue: Utilizzare queste due classi con alias:

use Zend\Config\Config as Zend_Config; 
use Zend\Config\Processor\Constant as Zend_Constant; 

e quindi utilizzare sia basso codice alla qualsiasi funzione della classe controller:

define ('TEST_CONST', 'bar'); 
// set true to Zend\Config\Config to allow modifications 
$config = new Zend_Config(array('foo' => 'TEST_CONST'), true); 
$processor = new Zend_Constant(); 
$processor->process($config); 
echo $config->foo; 

Darà o/p:

bar