2013-05-09 9 views
7

Muszę zadeklarować stałe, które są dostępne w dowolnym miejscu aplikacji. w Zend Framework 1 użyliśmy zadeklarować w application.ini jak:zend framework 2 stałe

constants.NAME_TITLE = "User Name", 

Gdzie i jak robimy to w Zend Framework 2?

+1

Co zastosowanie mają te stałe? Gdzie ich użyć? – Sam

+0

Jak zrobiłbyś to bez ramy? Gdyby była tylko funkcja, która pozwalałaby ci zdefiniować stałe. – Crisp

+0

@Sam Te stałe mają na celu zdefiniowanie zmiennych globalnych, które ustawię w konfiguracji na przykład. LINK_TO_SOAP_SERVICE, ich wartości są różne w różnych środowiskach. Dlatego ustawiam je w jednym miejscu i używam w całym projekcie. – user2367458

Odpowiedz

8

Znalazłem rozwiązanie here. Musisz utworzyć klasę pamięci w Modelu. W tej klasie możesz utworzyć tyle stałych, ile chcesz.

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

Teraz może to być dostępne wszędzie:

NameOfModule\Model\NameOfModel::NAMEOFCONSTANT 

Więc można na przykład wydrukować stała w widoku jak ten:

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

Dzięki za to! Umieszczam tam również tablice, nadając je w postaci szeregowej: http://stackoverflow.com/questions/1290318/php-constants-containing-arrays Redukuje wiele zduplikowanych kodów w twoich modułach! – Armfoot

+0

const UPLOAD_PATH = getcwd(). "/ public/uploads /"; dlaczego powoduje to błąd? – anil

-1

Można również funkcję i zmienną pisać do którego można uzyskać dostęp w dowolnym miejscu aplikacji, takim jak kontroler, model i widoki.

<?php 
namespace Webapp; 

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

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

i można uzyskać dostęp do tej funkcji klasy i mienia jak

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

i

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

To, co powiedziałeś, jest technicznie poprawne.Dla wyjaśnienia, normalnie nikt nie powinien wprowadzać stałych i statycznych metod do kontrolera (chyba że jest to rzadki przypadek, w którym nie mogą należeć do nikąd poza tym kontrolerem). – evilReiko

1

Dla Zend Framework 2, jeden alternatywnego rozwiązania.

można zdefiniować zmienną globalną wewnątrz config/autoload/local.php

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

i używać go w dowolnym miejscu tak jak:

$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

co to jest $ obj? nie sądzisz, że to spowoduje błąd? – user3542450

+0

Jeśli używasz PHP 5.4 lub nowszego, możesz zrobić to w 1 linii, tak jak to: 'echo $ obj-> getServiceLocator() -> get ('config') ['arrayname'] ['variable_name']; ' – evilReiko

0

Można zdefiniować, przypisywać i dostęp STAŁA w następujący sposób: za pomocą tych dwóch klas z aliasu:

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

a następnie użyć być niski kod do dowolnej funkcji klasy kontrolera:

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; 

Da O/P:

bar