<?php
namespace Jaxon;
use Jaxon\Request\Support\CallableObject;
use Psr\Log\LoggerInterface;
class CallableClass
{
/**
* The Callable object associated to this class
*
* @var CallableObject
*/
protected $callable = null;
/**
* The Jaxon response returned by all classes methods
*
* @var \Jaxon\Response\Response
*/
protected $response = null;
/**
* Get the view renderer
*
* @return \Jaxon\Utils\View\Renderer
*/
public function view()
{
return jaxon()->view();
}
/**
* Get the session manager
*
* @return \Jaxon\Contracts\Session
*/
public function session()
{
return jaxon()->session();
}
/**
* Get the logger
*
* @return LoggerInterface
*/
public function logger()
{
return jaxon()->logger();
}
/**
* Get the request factory.
*
* @return \Jaxon\Request\Factory\CallableClass\Request
*/
public function rq()
{
return jaxon()->di()->getCallableClassRequestFactory(get_class($this));
}
/**
* Create a JQuery Element with a given selector, and link it to the response attribute.
*
* @param string $sSelector The jQuery selector
* @param string $sContext A context associated to the selector
*
* @return \Jaxon\Response\Plugin\JQuery\Dom\Element
*/
public function jq($sSelector = '', $sContext = '')
{
return $this->response->plugin('jquery')->element($sSelector, $sContext);
}
/**
* Get an instance of a Jaxon class by name
*
* @param string $name the class name
*
* @return CallableClass|null the Jaxon class instance, or null
*/
public function cl($name)
{
$cFirstChar = substr($name, 0, 1);
// If the class name starts with a dot, then find the class in the same full namespace as the caller
if($cFirstChar == ':')
{
$name = $this->callable->getRootNamespace() . '\\' . str_replace('.', '\\', substr($name, 1));
}
// If the class name starts with a dot, then find the class in the same base namespace as the caller
elseif($cFirstChar == '.')
{
$name = $this->callable->getNamespace() . '\\' . str_replace('.', '\\', substr($name, 1));
}
// Find the class instance
return jaxon()->instance($name);
}
/**
* Get the uploaded files
*
* @return array
*/
public function files()
{
return jaxon()->upload()->files();
}
}
|