@@ -9,7 +9,7 @@ discard block |
||
| 9 | 9 | use Resta\Contracts\ApplicationContracts; |
| 10 | 10 | use Resta\Exception\FileNotFoundException; |
| 11 | 11 | |
| 12 | -class Container implements ContainerContracts,\ArrayAccess |
|
| 12 | +class Container implements ContainerContracts, \ArrayAccess |
|
| 13 | 13 | {
|
| 14 | 14 | /** |
| 15 | 15 | * @var bool |
@@ -51,12 +51,12 @@ discard block |
||
| 51 | 51 | * @param array $bind |
| 52 | 52 | * @return array |
| 53 | 53 | */ |
| 54 | - public function applicationProviderBinding($make,$bind=array()) |
|
| 54 | + public function applicationProviderBinding($make, $bind = array()) |
|
| 55 | 55 | {
|
| 56 | 56 | //service container is an automatic application provider |
| 57 | 57 | //that we can bind to the special class di in the dependency condition. |
| 58 | 58 | //This method is automatically added to the classes resolved by the entire make bind method. |
| 59 | - return array_merge($bind,['app'=>$make]); |
|
| 59 | + return array_merge($bind, ['app'=>$make]); |
|
| 60 | 60 | } |
| 61 | 61 | |
| 62 | 62 | /** |
@@ -68,16 +68,16 @@ discard block |
||
| 68 | 68 | * @throws DependencyException |
| 69 | 69 | * @throws NotFoundException |
| 70 | 70 | */ |
| 71 | - public function bind($object=null,$callback=null,$alias=null) |
|
| 71 | + public function bind($object = null, $callback = null, $alias = null) |
|
| 72 | 72 | {
|
| 73 | - if(!is_null($alias)){
|
|
| 73 | + if (!is_null($alias)) {
|
|
| 74 | 74 | $object = $alias; |
| 75 | 75 | } |
| 76 | 76 | |
| 77 | 77 | //If the bind method does not have parameters object and callback, the value is directly assigned to the kernel object. |
| 78 | 78 | //Otherwise, when the bind object and callback are sent, the closure class inherits |
| 79 | 79 | //the applicationProvider object and the resolve method is called |
| 80 | - return $this->make($object,$callback,'container'); |
|
| 80 | + return $this->make($object, $callback, 'container'); |
|
| 81 | 81 | } |
| 82 | 82 | |
| 83 | 83 | /** |
@@ -89,16 +89,16 @@ discard block |
||
| 89 | 89 | * @throws DependencyException |
| 90 | 90 | * @throws NotFoundException |
| 91 | 91 | */ |
| 92 | - private function build($object,$callback,$sync=false) |
|
| 92 | + private function build($object, $callback, $sync = false) |
|
| 93 | 93 | {
|
| 94 | 94 | //If the console object returns true, |
| 95 | 95 | //we do not cancel binding operations |
| 96 | 96 | //We are getting what applies to console with consoleKernelObject. |
| 97 | - if($sync===false) return $this->consoleKernelObjectChecker($object,$callback); |
|
| 97 | + if ($sync===false) return $this->consoleKernelObjectChecker($object, $callback); |
|
| 98 | 98 | |
| 99 | 99 | //the value corresponding to the bind value for the global object is assigned and |
| 100 | 100 | //the resolve method is called for the dependency injection. |
| 101 | - $this->kernelAssigner()->setKernelObject($object,$callback); |
|
| 101 | + $this->kernelAssigner()->setKernelObject($object, $callback); |
|
| 102 | 102 | |
| 103 | 103 | //return kernel object |
| 104 | 104 | return $this->kernel(); |
@@ -113,11 +113,11 @@ discard block |
||
| 113 | 113 | * @throws DependencyException |
| 114 | 114 | * @throws NotFoundException |
| 115 | 115 | */ |
| 116 | - private function consoleKernelObject($object,$callback,$container=false) |
|
| 116 | + private function consoleKernelObject($object, $callback, $container = false) |
|
| 117 | 117 | {
|
| 118 | 118 | //we use the console bindings class to specify the classes to be preloaded in the console application. |
| 119 | 119 | //Thus, classes that can not be bound with http are called without closure in global loaders directory. |
| 120 | - $this->resolve(ConsoleBindings::class)->console($object,$callback,$container); |
|
| 120 | + $this->resolve(ConsoleBindings::class)->console($object, $callback, $container); |
|
| 121 | 121 | |
| 122 | 122 | //The console application must always return the kernel method. |
| 123 | 123 | return $this->kernel(); |
@@ -132,7 +132,7 @@ discard block |
||
| 132 | 132 | * @throws DependencyException |
| 133 | 133 | * @throws NotFoundException |
| 134 | 134 | */ |
| 135 | - private function consoleKernelObjectChecker($object,$callback,$container=false) |
|
| 135 | + private function consoleKernelObjectChecker($object, $callback, $container = false) |
|
| 136 | 136 | {
|
| 137 | 137 | //we check whether the callback value is a callable function. |
| 138 | 138 | $isCallableForCallback = is_callable($callback); |
@@ -140,10 +140,10 @@ discard block |
||
| 140 | 140 | //If the console object returns true, |
| 141 | 141 | //we do not cancel binding operations |
| 142 | 142 | //We are getting what applies to console with consoleKernelObject. |
| 143 | - if($this->console() AND $isCallableForCallback) return $this->consoleKernelObject($object,$callback,$container); |
|
| 143 | + if ($this->console() AND $isCallableForCallback) return $this->consoleKernelObject($object, $callback, $container); |
|
| 144 | 144 | |
| 145 | 145 | //If the application is not a console operation, we re-bind to existing methods synchronously. |
| 146 | - return ($container) ? $this->containerBuild($object,$callback,true) : $this->build($object,$callback,true); |
|
| 146 | + return ($container) ? $this->containerBuild($object, $callback, true) : $this->build($object, $callback, true); |
|
| 147 | 147 | } |
| 148 | 148 | |
| 149 | 149 | /** |
@@ -153,11 +153,11 @@ discard block |
||
| 153 | 153 | * @throws DependencyException |
| 154 | 154 | * @throws NotFoundException |
| 155 | 155 | */ |
| 156 | - private function consoleShared($object,$callback) |
|
| 156 | + private function consoleShared($object, $callback) |
|
| 157 | 157 | {
|
| 158 | 158 | //The console share is evaluated as a true variable to be assigned as the 3rd parameter in the classes to be bound. |
| 159 | 159 | //The work to be done here is to bind the classes to be included in the console share privately. |
| 160 | - $this->kernelAssigner()->consoleShared($object,$callback); |
|
| 160 | + $this->kernelAssigner()->consoleShared($object, $callback); |
|
| 161 | 161 | } |
| 162 | 162 | |
| 163 | 163 | /** |
@@ -169,12 +169,12 @@ discard block |
||
| 169 | 169 | * @throws DependencyException |
| 170 | 170 | * @throws NotFoundException |
| 171 | 171 | */ |
| 172 | - public function containerBuild($object,$callback,$sync=false) |
|
| 172 | + public function containerBuild($object, $callback, $sync = false) |
|
| 173 | 173 | {
|
| 174 | 174 | //If the console object returns true, |
| 175 | 175 | //we do not cancel binding operations |
| 176 | 176 | //We are getting what applies to console with consoleKernelObject. |
| 177 | - if($sync===false) return $this->consoleKernelObjectChecker($object,$callback,true); |
|
| 177 | + if ($sync===false) return $this->consoleKernelObjectChecker($object, $callback, true); |
|
| 178 | 178 | |
| 179 | 179 | //Since the objects that come to the build method are objects from the container method, |
| 180 | 180 | //we need to automatically create a kernel object named serviceContainer in this method. |
@@ -182,7 +182,7 @@ discard block |
||
| 182 | 182 | |
| 183 | 183 | //the value corresponding to the bind value for the global object is assigned and |
| 184 | 184 | //the resolve method is called for the dependency method. |
| 185 | - $this->kernelAssigner()->setKernelObject($object,$callback,'serviceContainer'); |
|
| 185 | + $this->kernelAssigner()->setKernelObject($object, $callback, 'serviceContainer'); |
|
| 186 | 186 | |
| 187 | 187 | //return kernel object |
| 188 | 188 | return $this->kernel(); |
@@ -192,11 +192,11 @@ discard block |
||
| 192 | 192 | * @param $class |
| 193 | 193 | * @param $bind |
| 194 | 194 | */ |
| 195 | - private function contextualBindCleaner($class,$bind) |
|
| 195 | + private function contextualBindCleaner($class, $bind) |
|
| 196 | 196 | {
|
| 197 | 197 | //the context bind objects are checked again and the bind sequence submitted by |
| 198 | 198 | //the user is checked and forced to re-instantiate the object. |
| 199 | - if(isset(self::$instance[$class]) && self::$bindParams[$class]!==$bind){
|
|
| 199 | + if (isset(self::$instance[$class]) && self::$bindParams[$class]!==$bind) {
|
|
| 200 | 200 | unset(self::$instance[$class]); |
| 201 | 201 | unset(self::$bindParams[$class]); |
| 202 | 202 | } |
@@ -219,13 +219,13 @@ discard block |
||
| 219 | 219 | |
| 220 | 220 | // the has method can have a dotted string value so |
| 221 | 221 | // we need to be able to control the string or array within the container. |
| 222 | - foreach (explode(".",$abstract) as $item){
|
|
| 223 | - if(isset($container[$item])){
|
|
| 222 | + foreach (explode(".", $abstract) as $item) {
|
|
| 223 | + if (isset($container[$item])) {
|
|
| 224 | 224 | $container = $container[$item]; |
| 225 | 225 | } |
| 226 | - else{
|
|
| 226 | + else {
|
|
| 227 | 227 | $containerClosureResolver[] = $item; |
| 228 | - $container = ContainerClosureResolver::get(implode('.',$containerClosureResolver));
|
|
| 228 | + $container = ContainerClosureResolver::get(implode('.', $containerClosureResolver));
|
|
| 229 | 229 | } |
| 230 | 230 | } |
| 231 | 231 | |
@@ -247,11 +247,11 @@ discard block |
||
| 247 | 247 | |
| 248 | 248 | // the has method can have a dotted string value so |
| 249 | 249 | // we need to be able to control the string or array within the container. |
| 250 | - foreach (explode(".",$abstract) as $item){
|
|
| 250 | + foreach (explode(".", $abstract) as $item) {
|
|
| 251 | 251 | |
| 252 | 252 | // this blog will work |
| 253 | 253 | // if the data in the container loop points to an array. |
| 254 | - if(!is_array($container)){
|
|
| 254 | + if (!is_array($container)) {
|
|
| 255 | 255 | |
| 256 | 256 | // we are querying the value of |
| 257 | 257 | // the items corresponding to the dotted value in the container. |
@@ -259,7 +259,7 @@ discard block |
||
| 259 | 259 | $container = $container[$item]; |
| 260 | 260 | $bools[] = is_null($container) ? false : true; |
| 261 | 261 | } |
| 262 | - else{
|
|
| 262 | + else {
|
|
| 263 | 263 | |
| 264 | 264 | // if the container array corresponds to a string, |
| 265 | 265 | // the bools array is filled with the isset control directly. |
@@ -269,7 +269,7 @@ discard block |
||
| 269 | 269 | |
| 270 | 270 | // the method returns false if the bools sequence is false, |
| 271 | 271 | // otherwise it will return true. |
| 272 | - return in_array(false,$bools) ? false : true; |
|
| 272 | + return in_array(false, $bools) ? false : true; |
|
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | /** |
@@ -319,7 +319,7 @@ discard block |
||
| 319 | 319 | * @throws DependencyException |
| 320 | 320 | * @throws NotFoundException |
| 321 | 321 | */ |
| 322 | - public function make($object=null,$callback=null,$container=false) |
|
| 322 | + public function make($object = null, $callback = null, $container = false) |
|
| 323 | 323 | {
|
| 324 | 324 | //we check whether the boolean value of the singleton variable used |
| 325 | 325 | //for booting does not reset every time the object variable to be assigned to the kernel variable is true |
@@ -327,8 +327,8 @@ discard block |
||
| 327 | 327 | |
| 328 | 328 | //The console share is evaluated as a true variable to be assigned as the 3rd parameter in the classes to be bound. |
| 329 | 329 | //The work to be done here is to bind the classes to be included in the console share privately. |
| 330 | - if($container){
|
|
| 331 | - $this->consoleShared($object,$callback); |
|
| 330 | + if ($container) {
|
|
| 331 | + $this->consoleShared($object, $callback); |
|
| 332 | 332 | } |
| 333 | 333 | |
| 334 | 334 | //If the third parameter passed to the bind method carries a container value, |
@@ -338,7 +338,7 @@ discard block |
||
| 338 | 338 | //If the bind method does not have parameters object and callback, the value is directly assigned to the kernel object. |
| 339 | 339 | //Otherwise, when the bind object and callback are sent, the closure class inherits |
| 340 | 340 | //the applicationProvider object and the resolve method is called |
| 341 | - return ($object===null) ? $this->kernel() : $this->{$makeBuild}($object,$callback);
|
|
| 341 | + return ($object===null) ? $this->kernel() : $this->{$makeBuild}($object, $callback);
|
|
| 342 | 342 | } |
| 343 | 343 | |
| 344 | 344 | /** |
@@ -358,7 +358,7 @@ discard block |
||
| 358 | 358 | */ |
| 359 | 359 | public function offsetGet($offset) {
|
| 360 | 360 | |
| 361 | - return $this->resolve($this->instances['containerInstanceResolve'],[ |
|
| 361 | + return $this->resolve($this->instances['containerInstanceResolve'], [ |
|
| 362 | 362 | 'instances' => $this->instances |
| 363 | 363 | ])->{$offset}();
|
| 364 | 364 | } |
@@ -382,7 +382,7 @@ discard block |
||
| 382 | 382 | * @param null $concrete |
| 383 | 383 | * @return bool|mixed |
| 384 | 384 | */ |
| 385 | - public function register($key,$object,$concrete=null) |
|
| 385 | + public function register($key, $object, $concrete = null) |
|
| 386 | 386 | {
|
| 387 | 387 | // we assign the values required |
| 388 | 388 | // for register to the global value variable. |
@@ -392,7 +392,7 @@ discard block |
||
| 392 | 392 | |
| 393 | 393 | // If there is an instance of the application class, |
| 394 | 394 | // the register method is saved both in this example and in the global. |
| 395 | - if(defined('appInstance')){
|
|
| 395 | + if (defined('appInstance')) {
|
|
| 396 | 396 | |
| 397 | 397 | // where we will assign both the global instance |
| 398 | 398 | // and the registered application object. |
@@ -411,19 +411,19 @@ discard block |
||
| 411 | 411 | * @param bool $withConcrete |
| 412 | 412 | * @return bool |
| 413 | 413 | */ |
| 414 | - private function registerProcess($instance,$withConcrete=false) |
|
| 414 | + private function registerProcess($instance, $withConcrete = false) |
|
| 415 | 415 | {
|
| 416 | 416 | // values recorded without concrete. |
| 417 | 417 | // or values deleted |
| 418 | - if(false===$withConcrete){
|
|
| 418 | + if (false===$withConcrete) {
|
|
| 419 | 419 | |
| 420 | 420 | //values registered without concrete |
| 421 | - $instance->{$this->values['key']}=$this->values['object'];
|
|
| 421 | + $instance->{$this->values['key']} = $this->values['object'];
|
|
| 422 | 422 | return false; |
| 423 | 423 | } |
| 424 | 424 | |
| 425 | 425 | //values registered with concrete |
| 426 | - $instance->{$this->values['key']}[$this->values['object']]=$this->values['concrete'];
|
|
| 426 | + $instance->{$this->values['key']}[$this->values['object']] = $this->values['concrete'];
|
|
| 427 | 427 | } |
| 428 | 428 | |
| 429 | 429 | /** |
@@ -434,22 +434,22 @@ discard block |
||
| 434 | 434 | * @throws DependencyException |
| 435 | 435 | * @throws NotFoundException |
| 436 | 436 | */ |
| 437 | - public function resolve($class,$bind=array()) |
|
| 437 | + public function resolve($class, $bind = array()) |
|
| 438 | 438 | {
|
| 439 | 439 | //the context bind objects are checked again and the bind sequence submitted by |
| 440 | 440 | //the user is checked and forced to re-instantiate the object. |
| 441 | - $this->contextualBindCleaner($class,$bind); |
|
| 441 | + $this->contextualBindCleaner($class, $bind); |
|
| 442 | 442 | |
| 443 | 443 | //We do an instance check to get the static instance values of |
| 444 | 444 | //the classes to be resolved with the make bind method. |
| 445 | - if(!isset(self::$instance[$class])){
|
|
| 445 | + if (!isset(self::$instance[$class])) {
|
|
| 446 | 446 | |
| 447 | 447 | //bind params object |
| 448 | 448 | self::$bindParams[$class] = $bind; |
| 449 | 449 | |
| 450 | 450 | //By singleton checking, we solve the dependency injection of the given class. |
| 451 | 451 | //Thus, each class can be called together with its dependency. |
| 452 | - self::$instance[$class] = DIContainerManager::make($class,$this->applicationProviderBinding($this,self::$bindParams[$class])); |
|
| 452 | + self::$instance[$class] = DIContainerManager::make($class, $this->applicationProviderBinding($this, self::$bindParams[$class])); |
|
| 453 | 453 | $this->singleton()->resolved[$class] = self::$instance[$class]; |
| 454 | 454 | |
| 455 | 455 | //return resolve class |
@@ -467,9 +467,9 @@ discard block |
||
| 467 | 467 | * @param $class |
| 468 | 468 | * @return mixed |
| 469 | 469 | */ |
| 470 | - public function resolved($class){
|
|
| 470 | + public function resolved($class) {
|
|
| 471 | 471 | |
| 472 | - if(isset($this['resolved'][$class])){
|
|
| 472 | + if (isset($this['resolved'][$class])) {
|
|
| 473 | 473 | return $this['resolved'][$class]; |
| 474 | 474 | } |
| 475 | 475 | |
@@ -484,7 +484,7 @@ discard block |
||
| 484 | 484 | * @throws DependencyException |
| 485 | 485 | * @throws NotFoundException |
| 486 | 486 | */ |
| 487 | - public function share($object=null,$callback=null) |
|
| 487 | + public function share($object = null, $callback = null) |
|
| 488 | 488 | {
|
| 489 | 489 | //we check whether the boolean value of the singleton variable used |
| 490 | 490 | //for booting does not reset every time the object variable to be assigned to the kernel variable is true |
@@ -492,12 +492,12 @@ discard block |
||
| 492 | 492 | |
| 493 | 493 | //The console share is evaluated as a true variable to be assigned as the 3rd parameter in the classes to be bound. |
| 494 | 494 | //The work to be done here is to bind the classes to be included in the console share privately. |
| 495 | - $this->consoleShared($object,$callback); |
|
| 495 | + $this->consoleShared($object, $callback); |
|
| 496 | 496 | |
| 497 | 497 | //If the bind method does not have parameters object and callback, the value is directly assigned to the kernel object. |
| 498 | 498 | //Otherwise, when the bind object and callback are sent, the closure class inherits |
| 499 | 499 | //the applicationProvider object and the resolve method is called |
| 500 | - return ($object===null) ? $this->kernel() : $this->build($object,$callback); |
|
| 500 | + return ($object===null) ? $this->kernel() : $this->build($object, $callback); |
|
| 501 | 501 | |
| 502 | 502 | } |
| 503 | 503 | |
@@ -517,7 +517,7 @@ discard block |
||
| 517 | 517 | */ |
| 518 | 518 | public function singleton() |
| 519 | 519 | {
|
| 520 | - if($this->singleton===false){
|
|
| 520 | + if ($this->singleton===false) {
|
|
| 521 | 521 | |
| 522 | 522 | //after first initializing, the singleton variable is set to true, |
| 523 | 523 | //and subsequent incoming classes can inherit the loaded object. |
@@ -538,12 +538,12 @@ discard block |
||
| 538 | 538 | // for application instance |
| 539 | 539 | // if the values to be saved are to be saved without the concrete, |
| 540 | 540 | // if it is an array. |
| 541 | - if($this->values['concrete']===null) {
|
|
| 541 | + if ($this->values['concrete']===null) {
|
|
| 542 | 542 | |
| 543 | 543 | // Without concrete, |
| 544 | 544 | // the saved value will be saved |
| 545 | 545 | // if the it does not exist in application instance. |
| 546 | - if(!isset($instance->{$this->values['key']})) {
|
|
| 546 | + if (!isset($instance->{$this->values['key']})) {
|
|
| 547 | 547 | $this->registerProcess($instance); |
| 548 | 548 | } |
| 549 | 549 | return false; |
@@ -551,7 +551,7 @@ discard block |
||
| 551 | 551 | |
| 552 | 552 | // We send concrete values to be recorded with concrete as true. |
| 553 | 553 | // these values will be recorded as a array. |
| 554 | - $this->registerProcess($instance,true); |
|
| 554 | + $this->registerProcess($instance, true); |
|
| 555 | 555 | } |
| 556 | 556 | |
| 557 | 557 | /** |
@@ -559,11 +559,11 @@ discard block |
||
| 559 | 559 | * @param null|string $object |
| 560 | 560 | * @return mixed |
| 561 | 561 | */ |
| 562 | - public function terminate($key,$object=null) |
|
| 562 | + public function terminate($key, $object = null) |
|
| 563 | 563 | {
|
| 564 | 564 | // object null is |
| 565 | 565 | // sent to just terminate a key. |
| 566 | - if($object===null){
|
|
| 566 | + if ($object===null) {
|
|
| 567 | 567 | unset(core()->{$key});
|
| 568 | 568 | unset($this->singleton()->{$key});
|
| 569 | 569 | return false; |
@@ -94,7 +94,9 @@ discard block |
||
| 94 | 94 | //If the console object returns true, |
| 95 | 95 | //we do not cancel binding operations |
| 96 | 96 | //We are getting what applies to console with consoleKernelObject. |
| 97 | - if($sync===false) return $this->consoleKernelObjectChecker($object,$callback); |
|
| 97 | + if($sync===false) {
|
|
| 98 | + return $this->consoleKernelObjectChecker($object,$callback); |
|
| 99 | + } |
|
| 98 | 100 | |
| 99 | 101 | //the value corresponding to the bind value for the global object is assigned and |
| 100 | 102 | //the resolve method is called for the dependency injection. |
@@ -140,7 +142,9 @@ discard block |
||
| 140 | 142 | //If the console object returns true, |
| 141 | 143 | //we do not cancel binding operations |
| 142 | 144 | //We are getting what applies to console with consoleKernelObject. |
| 143 | - if($this->console() AND $isCallableForCallback) return $this->consoleKernelObject($object,$callback,$container); |
|
| 145 | + if($this->console() AND $isCallableForCallback) {
|
|
| 146 | + return $this->consoleKernelObject($object,$callback,$container); |
|
| 147 | + } |
|
| 144 | 148 | |
| 145 | 149 | //If the application is not a console operation, we re-bind to existing methods synchronously. |
| 146 | 150 | return ($container) ? $this->containerBuild($object,$callback,true) : $this->build($object,$callback,true); |
@@ -174,7 +178,9 @@ discard block |
||
| 174 | 178 | //If the console object returns true, |
| 175 | 179 | //we do not cancel binding operations |
| 176 | 180 | //We are getting what applies to console with consoleKernelObject. |
| 177 | - if($sync===false) return $this->consoleKernelObjectChecker($object,$callback,true); |
|
| 181 | + if($sync===false) {
|
|
| 182 | + return $this->consoleKernelObjectChecker($object,$callback,true); |
|
| 183 | + } |
|
| 178 | 184 | |
| 179 | 185 | //Since the objects that come to the build method are objects from the container method, |
| 180 | 186 | //we need to automatically create a kernel object named serviceContainer in this method. |
@@ -222,8 +228,7 @@ discard block |
||
| 222 | 228 | foreach (explode(".",$abstract) as $item){
|
| 223 | 229 | if(isset($container[$item])){
|
| 224 | 230 | $container = $container[$item]; |
| 225 | - } |
|
| 226 | - else{
|
|
| 231 | + } else{
|
|
| 227 | 232 | $containerClosureResolver[] = $item; |
| 228 | 233 | $container = ContainerClosureResolver::get(implode('.',$containerClosureResolver));
|
| 229 | 234 | } |
@@ -258,8 +263,7 @@ discard block |
||
| 258 | 263 | // the control result is transferred to the bools array. |
| 259 | 264 | $container = $container[$item]; |
| 260 | 265 | $bools[] = is_null($container) ? false : true; |
| 261 | - } |
|
| 262 | - else{
|
|
| 266 | + } else{
|
|
| 263 | 267 | |
| 264 | 268 | // if the container array corresponds to a string, |
| 265 | 269 | // the bools array is filled with the isset control directly. |