Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up Phalcon\DiInterface #2034

Merged
merged 3 commits into from Feb 12, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,13 @@
- Added Phalcon\Di\Service::isResolved() method (#1242)
- Make sure that 'persistent' is resolved only when accessed for the first time (#1637)
- Faster DI implementation by using object handlers (#1473)
- Changes to Phalcon\DiInterface (#2034)
- removed setShared() method because it is a shorthand for set($name, $definition, true);
- removed attempt() method because it is a shorthand for `has()` + `set()`
- renamed setRaw() to setService() because getRaw() is actually getService() + $service->getDefinition()
- setRaw() is now an alias for setService() but it will spit E_DEPRECATED
- removed `getRaw()` because it is `getService()` + `$service->getDefinition()`
- modified `setService($name, $raw_definition)` to `setService($raw_definition)` because service name can be retrieved from the definition
- Phalcon\Dispatcher:
- Dispatching parameters now can be modified in 'beforeExecuteRoute' events
- 'beforeException' events can now handle exceptions occurred when executing actions (#140)
Expand Down
8 changes: 5 additions & 3 deletions ext/cryptinterface.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ PHALCON_INIT_CLASS(Phalcon_CryptInterface){
* Sets the cipher algorithm
*
* @param string $cipher
* @return Phalcon\EncryptInterface
* @return Phalcon\CryptInterface
*/
PHALCON_DOC_METHOD(Phalcon_CryptInterface, setCipher);

Expand All @@ -67,7 +67,7 @@ PHALCON_DOC_METHOD(Phalcon_CryptInterface, getCipher);
* Sets the encrypt/decrypt mode
*
* @param string $cipher
* @return Phalcon\EncryptInterface
* @return Phalcon\CryptInterface
*/
PHALCON_DOC_METHOD(Phalcon_CryptInterface, setMode);

Expand All @@ -82,7 +82,7 @@ PHALCON_DOC_METHOD(Phalcon_CryptInterface, getMode);
* Sets the encryption key
*
* @param string $key
* @return Phalcon\EncryptInterface
* @return Phalcon\CryptInterface
*/
PHALCON_DOC_METHOD(Phalcon_CryptInterface, setKey);

Expand Down Expand Up @@ -116,6 +116,7 @@ PHALCON_DOC_METHOD(Phalcon_CryptInterface, decrypt);
*
* @param string $text
* @param string $key
* @param bool $url_safe
* @return string
*/
PHALCON_DOC_METHOD(Phalcon_CryptInterface, encryptBase64);
Expand All @@ -125,6 +126,7 @@ PHALCON_DOC_METHOD(Phalcon_CryptInterface, encryptBase64);
*
* @param string $text
* @param string $key
* @param bool $url_safe
* @return string
*/
PHALCON_DOC_METHOD(Phalcon_CryptInterface, decryptBase64);
Expand Down
82 changes: 61 additions & 21 deletions ext/di.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
#include "kernel/string.h"
#include "kernel/hash.h"

#include "internal/arginfo.h"

/**
* Phalcon\DI
*
Expand Down Expand Up @@ -466,8 +468,8 @@ PHP_METHOD(Phalcon_DI, set);
PHP_METHOD(Phalcon_DI, setShared);
PHP_METHOD(Phalcon_DI, remove);
PHP_METHOD(Phalcon_DI, attempt);
PHP_METHOD(Phalcon_DI, setRaw);
PHP_METHOD(Phalcon_DI, getRaw);
PHP_METHOD(Phalcon_DI, setService);
PHP_METHOD(Phalcon_DI, getService);
PHP_METHOD(Phalcon_DI, get);
PHP_METHOD(Phalcon_DI, getShared);
Expand All @@ -485,28 +487,51 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_di___call, 0, 0, 1)
ZEND_ARG_INFO(0, arguments)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_di_setshared, 0, 0, 2)
ZEND_ARG_INFO(0, name)
ZEND_ARG_INFO(0, definition)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_di_attempt, 0, 0, 2)
ZEND_ARG_INFO(0, name)
ZEND_ARG_INFO(0, definition)
ZEND_ARG_INFO(0, shared)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_di_getraw, 0, 0, 1)
ZEND_ARG_INFO(0, name)
ZEND_END_ARG_INFO()

static const zend_function_entry phalcon_di_method_entry[] = {
PHP_ME(Phalcon_DI, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
/* Phalcon\DiInterface*/
PHP_ME(Phalcon_DI, set, arginfo_phalcon_diinterface_set, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, setShared, arginfo_phalcon_diinterface_setshared, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, remove, arginfo_phalcon_diinterface_remove, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, attempt, arginfo_phalcon_diinterface_attempt, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, setRaw, arginfo_phalcon_diinterface_setraw, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, getRaw, arginfo_phalcon_diinterface_getraw, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, getRaw, arginfo_phalcon_di_getraw, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, getService, arginfo_phalcon_diinterface_getservice, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, setService, arginfo_phalcon_diinterface_setservice, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, get, arginfo_phalcon_diinterface_get, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, getShared, arginfo_phalcon_diinterface_getshared, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, has, arginfo_phalcon_diinterface_has, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, wasFreshInstance, NULL, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, getServices, NULL, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, offsetExists, has, arginfo_phalcon_diinterface_has, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, offsetSet, setShared, arginfo_phalcon_diinterface_setshared, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, offsetGet, getShared, arginfo_phalcon_diinterface_getshared, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, offsetUnset, remove, arginfo_phalcon_diinterface_remove, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, __call, arginfo_phalcon_di___call, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, setDefault, arginfo_phalcon_diinterface_setdefault, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
PHP_ME(Phalcon_DI, getDefault, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
PHP_ME(Phalcon_DI, reset, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)

/* Convenience methods */
PHP_ME(Phalcon_DI, attempt, arginfo_phalcon_di_attempt, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, setShared, arginfo_phalcon_di_setshared, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, setRaw, setService, arginfo_phalcon_diinterface_setservice, ZEND_ACC_PUBLIC | ZEND_ACC_DEPRECATED)

/* Syntactic sugar */
PHP_MALIAS(Phalcon_DI, offsetExists, has, arginfo_arrayaccess_offsetexists, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, offsetSet, setShared, arginfo_arrayaccess_offsetset, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, offsetGet, getShared, arginfo_arrayaccess_offsetget, ZEND_ACC_PUBLIC)
PHP_MALIAS(Phalcon_DI, offsetUnset, remove, arginfo_arrayaccess_offsetunset, ZEND_ACC_PUBLIC)
PHP_ME(Phalcon_DI, __call, arginfo_phalcon_di___call, ZEND_ACC_PUBLIC)

/* Misc */
PHP_ME(Phalcon_DI, __clone, NULL, ZEND_ACC_PUBLIC)
PHP_FE_END
};
Expand Down Expand Up @@ -662,24 +687,39 @@ PHP_METHOD(Phalcon_DI, attempt){
/**
* Sets a service using a raw Phalcon\DI\Service definition
*
* @param string $name
* @param string|Phalcon\DI\ServiceInterface $raw_definition_or_name
* @param Phalcon\DI\ServiceInterface $rawDefinition
* @return Phalcon\DI\ServiceInterface
*/
PHP_METHOD(Phalcon_DI, setRaw){

zval **name, **raw_definition;
PHP_METHOD(Phalcon_DI, setService)
{
zval **name_or_def, **raw_definition = NULL;
phalcon_di_object *obj;

phalcon_fetch_params_ex(2, 0, &name, &raw_definition);
PHALCON_ENSURE_IS_STRING(name);
PHALCON_VERIFY_INTERFACE_EX(*raw_definition, phalcon_di_serviceinterface_ce, phalcon_di_exception_ce, 0);

phalcon_fetch_params_ex(1, 1, &name_or_def, &raw_definition);

obj = phalcon_di_get_object(getThis() TSRMLS_CC);

Z_ADDREF_PP(raw_definition);
zend_hash_update(obj->services, Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, (void*)raw_definition, sizeof(zval*), NULL);

if (raw_definition != NULL) {
zval *name = NULL;
raw_definition = name_or_def;
PHALCON_VERIFY_INTERFACE_EX(*raw_definition, phalcon_di_serviceinterface_ce, phalcon_di_exception_ce, 0);

RETURN_ON_FAILURE(phalcon_call_method_params(name, &name, *raw_definition, SL("getname"), zend_inline_hash_func(SS("getname")) TSRMLS_CC, 0));

Z_ADDREF_PP(raw_definition);
zend_hash_update(obj->services, Z_STRVAL_P(name), Z_STRLEN_P(name)+1, (void*)raw_definition, sizeof(zval*), NULL);
zval_ptr_dtor(&name);
}
else {
zval **name = name_or_def;
PHALCON_ENSURE_IS_STRING(name);
PHALCON_VERIFY_INTERFACE_EX(*raw_definition, phalcon_di_serviceinterface_ce, phalcon_di_exception_ce, 0);

Z_ADDREF_PP(raw_definition);
zend_hash_update(obj->services, Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, (void*)raw_definition, sizeof(zval*), NULL);
}

RETURN_ZVAL(*raw_definition, 1, 0);
}

Expand Down
48 changes: 8 additions & 40 deletions ext/diinterface.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,10 @@ zend_class_entry *phalcon_diinterface_ce;

static const zend_function_entry phalcon_diinterface_method_entry[] = {
PHP_ABSTRACT_ME(Phalcon_DiInterface, set, arginfo_phalcon_diinterface_set)
PHP_ABSTRACT_ME(Phalcon_DiInterface, setShared, arginfo_phalcon_diinterface_setshared)
PHP_ABSTRACT_ME(Phalcon_DiInterface, remove, arginfo_phalcon_diinterface_remove)
PHP_ABSTRACT_ME(Phalcon_DiInterface, attempt, arginfo_phalcon_diinterface_attempt)
PHP_ABSTRACT_ME(Phalcon_DiInterface, get, arginfo_phalcon_diinterface_get)
PHP_ABSTRACT_ME(Phalcon_DiInterface, getShared, arginfo_phalcon_diinterface_getshared)
PHP_ABSTRACT_ME(Phalcon_DiInterface, setRaw, arginfo_phalcon_diinterface_setraw)
PHP_ABSTRACT_ME(Phalcon_DiInterface, getRaw, arginfo_phalcon_diinterface_getraw)
PHP_ABSTRACT_ME(Phalcon_DiInterface, setService, arginfo_phalcon_diinterface_setservice)
PHP_ABSTRACT_ME(Phalcon_DiInterface, getService, arginfo_phalcon_diinterface_getservice)
PHP_ABSTRACT_ME(Phalcon_DiInterface, has, arginfo_phalcon_diinterface_has)
PHP_ABSTRACT_ME(Phalcon_DiInterface, wasFreshInstance, NULL)
Expand All @@ -56,7 +53,7 @@ PHALCON_INIT_CLASS(Phalcon_DiInterface){
}

/**
* Registers a service in the services container
* Registers a service in the service container
*
* @param string $name
* @param mixed $definition
Expand All @@ -66,48 +63,27 @@ PHALCON_INIT_CLASS(Phalcon_DiInterface){
PHALCON_DOC_METHOD(Phalcon_DiInterface, set);

/**
* Registers an "always shared" service in the services container
*
* @param string $name
* @param mixed $definition
* @return Phalcon\DI\ServiceInterface
*/
PHALCON_DOC_METHOD(Phalcon_DiInterface, setShared);

/**
* Removes a service in the services container
* Removes a service from the service container
*
* @param string $name
*/
PHALCON_DOC_METHOD(Phalcon_DiInterface, remove);

/**
* Attempts to register a service in the services container
* Only is successful if a service hasn't been registered previously
* with the same name
*
* @param string $name
* @param mixed $definition
* @param boolean $shared
* @return Phalcon\DI\ServiceInterface
*/
PHALCON_DOC_METHOD(Phalcon_DiInterface, attempt);

/**
* Resolves the service based on its configuration
*
* @param string $name
* @param array $parameters
* @return mixed
* @return object
*/
PHALCON_DOC_METHOD(Phalcon_DiInterface, get);

/**
* Returns a shared service based on their configuration
* Resolves a shared service based on their configuration
*
* @param string $name
* @param array $parameters
* @return mixed
* @return object
*/
PHALCON_DOC_METHOD(Phalcon_DiInterface, getShared);

Expand All @@ -118,15 +94,7 @@ PHALCON_DOC_METHOD(Phalcon_DiInterface, getShared);
* @param Phalcon\DI\ServiceInterface $rawDefinition
* @return Phalcon\DI\ServiceInterface
*/
PHALCON_DOC_METHOD(Phalcon_DiInterface, setRaw);

/**
* Returns a service definition without resolving
*
* @param string $name
* @return mixed
*/
PHALCON_DOC_METHOD(Phalcon_DiInterface, getRaw);
PHALCON_DOC_METHOD(Phalcon_DiInterface, setService);

/**
* Returns the corresponding Phalcon\Di\Service instance for a service
Expand Down Expand Up @@ -159,7 +127,7 @@ PHALCON_DOC_METHOD(Phalcon_DiInterface, wasFreshInstance);
PHALCON_DOC_METHOD(Phalcon_DiInterface, getServices);

/**
* Set a default dependency injection container to be obtained into static methods
* Set the default dependency injection container to be obtained into static methods
*
* @param Phalcon\DiInterface $dependencyInjector
*/
Expand Down
22 changes: 3 additions & 19 deletions ext/diinterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_set, 0, 0, 2)
ZEND_ARG_INFO(0, shared)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_setshared, 0, 0, 2)
ZEND_ARG_INFO(0, name)
ZEND_ARG_INFO(0, definition)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_remove, 0, 0, 1)
ZEND_ARG_INFO(0, name)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_attempt, 0, 0, 2)
ZEND_ARG_INFO(0, name)
ZEND_ARG_INFO(0, definition)
ZEND_ARG_INFO(0, shared)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_get, 0, 0, 1)
ZEND_ARG_INFO(0, name)
ZEND_ARG_INFO(0, parameters)
Expand All @@ -57,17 +46,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_getshared, 0, 0, 1)
ZEND_ARG_INFO(0, parameters)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_setraw, 0, 0, 2)
ZEND_ARG_INFO(0, name)
ZEND_ARG_INFO(0, rawDefinition)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_getraw, 0, 0, 1)
ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_getservice, 0, 0, 1)
ZEND_ARG_INFO(0, name)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_getservice, 0, 0, 1)
ZEND_ARG_INFO(0, name)
ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_setservice, 0, 0, 1)
ZEND_ARG_INFO(0, rawDefinition)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_diinterface_has, 0, 0, 1)
Expand Down