本文整理匯總了PHP中think\Loader::action方法的典型用法代碼示例。如果您正苦於以下問題:PHP Loader::action方法的具體用法?PHP Loader::action怎麽用?PHP Loader::action使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類think\Loader
的用法示例。
在下文中一共展示了Loader::action方法的6個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: W
/**
* 渲染輸出Widget
* @param string $name Widget名稱
* @param array $data 傳人的參數
* @return mixed
*/
function W($name, $data = [])
{
return \think\Loader::action($name, $data, 'Widget');
}
示例2: run
/**
* 執行應用程序
* @access public
* @param \think\Request $request Request對象
* @return \think\Response
* @throws Exception
*/
public static function run($request)
{
// 初始化應用(公共模塊)
self::initModule(COMMON_MODULE, Config::get());
// 獲取配置參數
$config = Config::get();
// 注冊根命名空間
if (!empty($config['root_namespace'])) {
Loader::addNamespace($config['root_namespace']);
}
// 加載額外文件
if (!empty($config['extra_file_list'])) {
foreach ($config['extra_file_list'] as $file) {
$file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
if (is_file($file)) {
include_once $file;
}
}
}
// 設置係統時區
date_default_timezone_set($config['default_timezone']);
// 監聽app_init
APP_HOOK && Hook::listen('app_init');
// 開啟多語言機製
if ($config['lang_switch_on']) {
// 獲取當前語言
defined('LANG_SET') or define('LANG_SET', Lang::range());
// 加載係統語言包
Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
if (!APP_MULTI_MODULE) {
Lang::load(APP_PATH . 'lang' . DS . LANG_SET . EXT);
}
}
// 獲取當前請求的調度信息
$dispatch = $request->dispatch();
if (empty($dispatch)) {
// 未指定調度類型 則進行URL路由檢測
$dispatch = self::route($request, $config);
}
// 記錄路由信息
APP_DEBUG && Log::record('[ ROUTE ] ' . var_export($dispatch, true), 'info');
// 監聽app_begin
APP_HOOK && Hook::listen('app_begin', $dispatch);
try {
switch ($dispatch['type']) {
case 'redirect':
// 執行重定向跳轉
header('Location: ' . $dispatch['url'], true, $dispatch['status']);
break;
case 'module':
// 模塊/控製器/操作
$data = self::module($dispatch['module'], $config);
break;
case 'controller':
// 執行控製器操作
$data = Loader::action($dispatch['controller'], $dispatch['params']);
break;
case 'method':
// 執行回調方法
$data = self::invokeMethod($dispatch['method'], $dispatch['params']);
break;
case 'function':
// 規則閉包
$data = self::invokeFunction($dispatch['function'], $dispatch['params']);
break;
case 'finish':
// 已經完成 不再繼續執行
break;
default:
throw new Exception('dispatch type not support', 10008);
}
} catch (HttpResponseException $exception) {
$data = $exception->getResponse();
}
// 輸出數據到客戶端
if (isset($data)) {
if ($data instanceof Response) {
return $data->send();
} else {
// 監聽app_end
APP_HOOK && Hook::listen('app_end', $data);
// 自動響應輸出
return Response::instance()->send($data, '', Config::get('response_return'));
}
}
}
示例3: action
/**
* 調用模塊的操作方法 參數格式 [模塊/控製器/]操作
* @param string $url 調用地址
* @param string|array $vars 調用參數 支持字符串和數組
* @param string $layer 要調用的控製層名稱
* @param bool $appendSuffix 是否添加類名後綴
* @return mixed
*/
function action($url, $vars = [], $layer = 'controller', $appendSuffix = false)
{
return Loader::action($url, $vars, $layer, $appendSuffix);
}
示例4: run
/**
* 執行應用程序
* @access public
* @param Request $request Request對象
* @return Response
* @throws Exception
*/
public static function run(Request $request = null)
{
is_null($request) && ($request = Request::instance());
if ('ico' == $request->ext()) {
throw new HttpException(404, 'ico file not exists');
}
$config = self::initCommon();
try {
// 開啟多語言機製
if ($config['lang_switch_on']) {
// 獲取當前語言
$request->langset(Lang::detect());
// 加載係統語言包
Lang::load(THINK_PATH . 'lang' . DS . $request->langset() . EXT);
if (!$config['app_multi_module']) {
Lang::load(APP_PATH . 'lang' . DS . $request->langset() . EXT);
}
}
// 獲取應用調度信息
$dispatch = self::$dispatch;
if (empty($dispatch)) {
// 進行URL路由檢測
$dispatch = self::routeCheck($request, $config);
}
// 記錄當前調度信息
$request->dispatch($dispatch);
// 記錄路由信息
self::$debug && Log::record('[ ROUTE ] ' . var_export($dispatch, true), 'info');
// 監聽app_begin
Hook::listen('app_begin', $dispatch);
switch ($dispatch['type']) {
case 'redirect':
// 執行重定向跳轉
$data = Response::create($dispatch['url'], 'redirect')->code($dispatch['status']);
break;
case 'module':
// 模塊/控製器/操作
$data = self::module($dispatch['module'], $config, isset($dispatch['convert']) ? $dispatch['convert'] : null);
break;
case 'controller':
// 執行控製器操作
$data = Loader::action($dispatch['controller'], $dispatch['params']);
break;
case 'method':
// 執行回調方法
$data = self::invokeMethod($dispatch['method'], $dispatch['params']);
break;
case 'function':
// 執行閉包
$data = self::invokeFunction($dispatch['function'], $dispatch['params']);
break;
case 'response':
$data = $dispatch['response'];
break;
default:
throw new \InvalidArgumentException('dispatch type not support');
}
} catch (HttpResponseException $exception) {
$data = $exception->getResponse();
}
// 清空類的實例化
Loader::clearInstance();
// 輸出數據到客戶端
if ($data instanceof Response) {
$response = $data;
} elseif (!is_null($data)) {
// 默認自動識別響應輸出類型
$isAjax = $request->isAjax();
$type = $isAjax ? Config::get('default_ajax_return') : Config::get('default_return_type');
$response = Response::create($data, $type);
} else {
$response = Response::create();
}
// 監聽app_end
Hook::listen('app_end', $response);
// Trace調試注入
if (Config::get('app_trace')) {
Debug::inject($response);
}
return $response;
}
示例5: action
/**
* 調用模塊的操作方法 參數格式 [模塊/控製器/]操作
* @param string $url 調用地址
* @param string|array $vars 調用參數 支持字符串和數組
* @param string $layer 要調用的控製層名稱
* @return mixed
*/
function action($url, $vars = [], $layer = CONTROLLER_LAYER)
{
return Loader::action($url, $vars, $layer);
}
示例6: run
/**
* 執行應用程序
* @access public
* @param Request $request Request對象
* @return Response
* @throws Exception
*/
public static function run(Request $request = null)
{
is_null($request) && ($request = Request::instance());
try {
$config = self::initCommon();
if (defined('BIND_MODULE')) {
// 模塊/控製器綁定
BIND_MODULE && Route::bind(BIND_MODULE);
} elseif ($config['auto_bind_module']) {
// 入口自動綁定
$name = pathinfo($request->baseFile(), PATHINFO_FILENAME);
if ($name && 'index' != $name && is_dir(APP_PATH . $name)) {
Route::bind($name);
}
}
$request->filter($config['default_filter']);
if ($config['lang_switch_on']) {
// 開啟多語言機製 檢測當前語言
Lang::detect();
} else {
// 讀取默認語言
Lang::range($config['default_lang']);
}
$request->langset(Lang::range());
// 加載係統語言包
Lang::load([THINK_PATH . 'lang' . DS . $request->langset() . EXT, APP_PATH . 'lang' . DS . $request->langset() . EXT]);
// 獲取應用調度信息
$dispatch = self::$dispatch;
if (empty($dispatch)) {
// 進行URL路由檢測
$dispatch = self::routeCheck($request, $config);
}
// 記錄當前調度信息
$request->dispatch($dispatch);
// 記錄路由和請求信息
if (self::$debug) {
Log::record('[ ROUTE ] ' . var_export($dispatch, true), 'info');
Log::record('[ HEADER ] ' . var_export($request->header(), true), 'info');
Log::record('[ PARAM ] ' . var_export($request->param(), true), 'info');
}
// 監聽app_begin
Hook::listen('app_begin', $dispatch);
switch ($dispatch['type']) {
case 'redirect':
// 執行重定向跳轉
$data = Response::create($dispatch['url'], 'redirect')->code($dispatch['status']);
break;
case 'module':
// 模塊/控製器/操作
$data = self::module($dispatch['module'], $config, isset($dispatch['convert']) ? $dispatch['convert'] : null);
break;
case 'controller':
// 執行控製器操作
$data = Loader::action($dispatch['controller']);
break;
case 'method':
// 執行回調方法
$data = self::invokeMethod($dispatch['method']);
break;
case 'function':
// 執行閉包
$data = self::invokeFunction($dispatch['function']);
break;
case 'response':
$data = $dispatch['response'];
break;
default:
throw new \InvalidArgumentException('dispatch type not support');
}
} catch (HttpResponseException $exception) {
$data = $exception->getResponse();
}
// 清空類的實例化
Loader::clearInstance();
// 輸出數據到客戶端
if ($data instanceof Response) {
$response = $data;
} elseif (!is_null($data)) {
// 默認自動識別響應輸出類型
$isAjax = $request->isAjax();
$type = $isAjax ? Config::get('default_ajax_return') : Config::get('default_return_type');
$response = Response::create($data, $type);
} else {
$response = Response::create();
}
// 監聽app_end
Hook::listen('app_end', $response);
return $response;
}