예제 #1
0
파일: HashMapTest.php 프로젝트: pmvc/pmvc
 public function testPlug()
 {
     $class = __NAMESPACE__ . '\\FakePlug';
     $plug_name = 'fake_plug';
     $plug = plug($plug_name, [_CLASS => $class]);
     $this->assertEquals($class, plug($plug_name)[_CLASS]);
 }
예제 #2
0
파일: UtilPlugTest.php 프로젝트: pmvc/pmvc
 public function testUnPlug()
 {
     $class = __NAMESPACE__ . '\\FakePlug';
     plug('fake', [_CLASS => $class]);
     $this->assertTrue(exists('fake', 'PlugIn'));
     unPlug('fake');
     $this->assertFalse(exists('fake', 'PlugIn'));
 }
예제 #3
0
function plug($sockets, $filename = '')
{
    if (count($sockets) > 0) {
        $array = array_shift($sockets);
        foreach ($array as $value) {
            $plugged = plug($sockets, "{$filename}/{$value}");
            if (!is_null($plugged)) {
                return $plugged;
            }
        }
        return NULL;
    }
    return is_file(BASEPATH . $filename) ? $filename : NULL;
}
예제 #4
0
/**
 * Get site folder.
 *
 * @return string
 */
function getAppsParent()
{
    $folder = realpath(lastSlash(plug('controller')[_RUN_APPS]) . '../') . '/';
    return $folder;
}
예제 #5
0
 /**
  * Execute ActionForward.
  *
  * @return mixed
  */
 public function go()
 {
     switch ($this->getType()) {
         case 'view':
             return $this->_processView();
         case 'redirect':
             $this->_processHeader();
             $path = $this->getPath(true);
             return callPlugin(getOption(_ROUTER), 'go', [$path]);
         case 'action':
         default:
             if (exists(_RUN_APP, 'plugin')) {
                 plug(_RUN_APP)->append(get($this));
             }
             return $this;
     }
 }
예제 #6
0
 /**
  * Find a form.
  *
  * @param string $name name
  *
  * @return ActionForm
  */
 public function findForm($name)
 {
     $form = value($this->_mappings, [ACTION_FORMS, $name]);
     if (!class_exists($form[_CLASS]) && !is_callable($form[_CLASS]) && exists(_RUN_APP, 'plugin')) {
         $func = plug(_RUN_APP)->isCallable($form[_CLASS]);
         if ($func) {
             $form[_CLASS] = $func;
         }
     }
     if (is_callable($form[_CLASS])) {
         $actionForm = call_user_func($form[_CLASS]);
     } else {
         if (!class_exists($form[_CLASS])) {
             $form[_CLASS] = getOption(_DEFAULT_FORM, __NAMESPACE__ . '\\ActionForm');
         }
         $actionForm = new $form[_CLASS]();
     }
     return $actionForm;
 }
예제 #7
0
<?php

if (preg_match('#^' . dirname($_SERVER['SCRIPT_NAME']) . '/index#', $_SERVER['REQUEST_URI']) !== 0) {
    echo 'URI must not begin with index.';
    exit(1);
}
require_once BASEPATH . plug([$packages, ['common.php']]);
require_once BASEPATH . plug([$packages, ['plug.php']]);
plug_config('wild_targets');
plug_config('segments');
$instance =& get_instance();
foreach ($instance->config['wild_targets'] as $array) {
    foreach ($array as $value) {
        $instance->config['segments']['target'][] = $value;
    }
}
$instance->segments = path_to_segments($_SERVER['PATH_INFO']);
$plugged = plug_controller($instance->segments['target']);
$class = preg_replace('/.php$/', '', basename($plugged));
$instance = new $class();
call_user_func_array([$instance, $instance->segments['action']], $instance->segments['args']);
예제 #8
0
 /**
  * 直接参照ファイルをプラグする
  */
 function plug_direct($file)
 {
     $instance =& get_instance();
     $sockets = [array_merge($GLOBALS['packages'], ['']), ['direct']];
     foreach (isset($instance->config['segments']) ? array_keys($instance->config['segments']) : [] as $key) {
         if ($key == 'target') {
             break;
         }
         $sockets[] = isset($instance->segments[$key]) ? [$instance->segments[$key], ''] : [''];
     }
     $socket = [''];
     if (isset($instance->segments['target'])) {
         $socket = [$instance->segments['target']];
         if (isset($instance->config['wild_targets'])) {
             foreach ($instance->config['wild_targets'] as $key => $value) {
                 if (in_array($instance->segments['target'], $value)) {
                     $socket[] = $key;
                 }
             }
         }
         $socket[] = '';
     }
     $sockets[] = $socket;
     $sockets[] = isset($instance->segments['action']) ? [$instance->segments['action'], ''] : [''];
     $sockets[] = [$file];
     $plugged = plug($sockets);
     return $plugged;
 }
예제 #9
0
파일: FakeAlias.php 프로젝트: pmvc/pmvc
 public function init()
 {
     $this->setDefaultAlias(new FakeObject());
     $this->parentAlias = plug('fake');
 }