Kohana框架的安装及部署

Kohana框架的安装及部署

  • tips
  • Kohana安装以及部署
    • 1、重要文件作用说明
      • 1.1 /index.php
      • 1.2 /application/bootstrap.php
    • 2、项目结构
    • 3、路由配置
      • 3.1、隐藏项目入口的路由
      • 3.2、配置默认路由
      • 3.3、配置自定义的路由(Controller目录下的控制器)
      • 3.4、配置自定义的路由(Controller/directory下的控制器)

tips

kohana官网:https://kohanaframework.org/

kohana中文文档:https://github.com/stenote/Kohana_Docs_zh_CN/tree/master

Kohana安装以及部署

在官网下载kohana压缩包,解压到自己web项目目录下

kohana框架是一个轻量级的PHP开发框架,包结构主要分为4个部分:

  • application目录:应用程序的主要目录,包含了控制器、模型、视图和其他自定义代码文件。
  • system目录:这是Kohana框架的核心目录,包含了框架的各种类和库文件。通常不需要修改这些文件,除非你有特定的需求。
  • modules目录:这个目录用于存放可重用的模块。每个模块都可以有自己的MVC结构,类似于应用程序的结构。
  • public目录:这是Web服务器的根目录,其中包含了入口文件index.php和一些静态资源文件,如CSS、JavaScript和图片等。

1、重要文件作用说明

  • /index.php

index.php:这是Kohana应用程序的入口文件,位于public目录下。当Web服务器接收到请求时,会将请求交给index.php处理。该文件负责初始化框架并调度请求到相应的控制器和动作。它通常包含一些必要的设置和引入bootstrap.php文件的代码。

index.php是Kohana应用程序的入口文件,用于处理请求和调度控制器

  • /install.php

install.php:这是一个安装脚本,用于在初始部署时设置Kohana框架。它位于系统目录下,主要用于执行一些初始化操作,如创建数据库表、设置文件权限等。一旦完成安装过程,通常建议删除或禁用install.php文件,以防止未经授权的访问。

install.php是一个安装脚本,用于执行初始设置和配置。

  • /application/bootstrap.php

在Kohana框架中,bootstrap.php是一个重要的文件,它位于系统目录下。这个文件主要用于初始化框架和应用程序的各种设置。

在bootstrap.php文件中,你可以进行以下操作:

  1. 定义常量:你可以定义一些全局常量,如应用程序的根目录路径、环境变量等。
  2. 加载必要的文件:bootstrap.php会加载一些必要的文件,包括Autoloader类、Exception处理类等。
  3. 配置框架:你可以设置框架的各种配置选项,如默认时区、错误报告级别、数据库连接等。
  4. 注册模块:如果你使用了额外的模块,你可以在这里注册它们,以便框架能够正确加载和使用它们。
  5. 运行应用程序:最后,bootstrap.php会运行应用程序,启动请求处理流程,并将控制权交给应用程序的入口文件index.php。
  6. 配置路由规则,映射controller下的接口

bootstrap.php文件负责初始化框架和应用程序的各种设置,为应用程序的正常运行做好准备工作。

1.1 /index.php

<?php// application模块的包名
$application = 'application';// modules模块的包名
$modules = 'modules';// system模块的包名
$system = 'system';// 定义EXT为.php,即PHP文件后缀
define('EXT', '.php');// 设置错误报告级别为全部:严重错误、警告、通知,严格编码规范及最佳实践
error_reporting(E_ALL | E_STRICT);// 定义常量DOCROOT 为 /,即全路径为根路径/
// Set the full path to the docroot
define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);// 校验包路径是否为文件夹
// Make the application relative to the docroot, for symlink'd index.php
if ( ! is_dir($application) AND is_dir(DOCROOT.$application))$application = DOCROOT.$application;// Make the modules relative to the docroot, for symlink'd index.php
if ( ! is_dir($modules) AND is_dir(DOCROOT.$modules))$modules = DOCROOT.$modules;// Make the system relative to the docroot, for symlink'd index.php
if ( ! is_dir($system) AND is_dir(DOCROOT.$system))$system = DOCROOT.$system;// Define the absolute paths for configured directories
// 为配置好的包定义全路径常量名,即APPPATh为application包的全路径,MODPATH为modules包的全路径,SYSPATH为system包的全路径
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);
define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR);
define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR);// Clean up the configuration vars
// 清除变量
unset($application, $modules, $system);// 判断install.php文件是否存在,如果存在,则引入
if (file_exists('install'.EXT))
{// Load the installation checkreturn include 'install'.EXT;
}
// 设置应用的启动时间常量
/*** Define the start time of the application, used for profiling.*/
if ( ! defined('KOHANA_START_TIME'))
{define('KOHANA_START_TIME', microtime(TRUE));
}/*** Define the memory usage at the start of the application, used for profiling.*/
// 设置当前系统内存使用情况常量
if ( ! defined('KOHANA_START_MEMORY'))
{define('KOHANA_START_MEMORY', memory_get_usage());
}// 引入bootstrap文件(重要)
// Bootstrap the application
require APPPATH.'bootstrap'.EXT;// 判断当前运行环境是否是命令行环境,根据环境运行应用程序
if (PHP_SAPI == 'cli') // Try and load minion
{class_exists('Minion_Task') OR die('Please enable the Minion module for CLI support.');set_exception_handler(array('Minion_Exception', 'handler'));// 执行命令行任务Minion_Task::factory(Minion_CLI::options())->execute();
}
else
{/*** Execute the main request. A source of the URI can be passed, eg: $_SERVER['PATH_INFO'].* If no source is specified, the URI will be automatically detected.*/echo Request::factory(TRUE, array(), FALSE)// 创建请求对象,用于处理HTTP请求// 把请求处理结果输出到浏览器->execute()->send_headers(TRUE)->body();
}

1.2 /application/bootstrap.php

<?php defined('SYSPATH') or die('No direct script access.');// -- Environment setup --------------------------------------------------------// Load the core Kohana class
// 加载kohana的核心库
require SYSPATH.'classes/Kohana/Core'.EXT;// 在application包下或者system包下引入Kohana.php文件
if (is_file(APPPATH.'classes/Kohana'.EXT))
{// Application extends the corerequire APPPATH.'classes/Kohana'.EXT;
}
else
{// Load empty core extensionrequire SYSPATH.'classes/Kohana'.EXT;
}/*** Set the default time zone.** @link http://kohanaframework.org/guide/using.configuration* @link http://www.php.net/manual/timezones*/
// 设置默认时区
date_default_timezone_set('America/Chicago');/*** Set the default locale.** @link http://kohanaframework.org/guide/using.configuration* @link http://www.php.net/manual/function.setlocale*/
// 设置语言环境
setlocale(LC_ALL, 'en_US.utf-8');/*** Enable the Kohana auto-loader.** @link http://kohanaframework.org/guide/using.autoloading* @link http://www.php.net/manual/function.spl-autoload-register*/
// 允许kohana的自动加载器
spl_autoload_register(array('Kohana', 'auto_load'));/*** Optionally, you can enable a compatibility auto-loader for use with* older modules that have not been updated for PSR-0.** It is recommended to not enable this unless absolutely necessary.*/
//spl_autoload_register(array('Kohana', 'auto_load_lowercase'));/*** Enable the Kohana auto-loader for unserialization.** @link http://www.php.net/manual/function.spl-autoload-call* @link http://www.php.net/manual/var.configuration#unserialize-callback-func*/
ini_set('unserialize_callback_func', 'spl_autoload_call');/*** Set the mb_substitute_character to "none"** @link http://www.php.net/manual/function.mb-substitute-character.php*/
mb_substitute_character('none');// -- Configuration and initialization -----------------------------------------/*** Set the default language*/
I18n::lang('en-us');if (isset($_SERVER['SERVER_PROTOCOL']))
{// Replace the default protocol.HTTP::$protocol = $_SERVER['SERVER_PROTOCOL'];
}/*** Set Kohana::$environment if a 'KOHANA_ENV' environment variable has been supplied.** Note: If you supply an invalid environment name, a PHP warning will be thrown* saying "Couldn't find constant Kohana::<INVALID_ENV_NAME>"*/
//设置kohana的环境常量
if (isset($_SERVER['KOHANA_ENV']))
{Kohana::$environment = constant('Kohana::'.strtoupper($_SERVER['KOHANA_ENV']));
}/*** Initialize Kohana, setting the default options.** The following options are available:** - string   base_url    path, and optionally domain, of your application   NULL* - string   index_file  name of your index file, usually "index.php"       index.php* - string   charset     internal character set used for input and output   utf-8* - string   cache_dir   set the internal cache directory                   APPPATH/cache* - integer  cache_life  lifetime, in seconds, of items cached              60* - boolean  errors      enable or disable error handling                   TRUE* - boolean  profile     enable or disable internal profiling               TRUE* - boolean  caching     enable or disable internal caching                 FALSE* - boolean  expose      set the X-Powered-By header                        FALSE*/
Kohana::init(array('base_url'   => '/',
));/*** Attach the file write to logging. Multiple writers are supported.*/
Kohana::$log->attach(new Log_File(APPPATH.'logs'));/*** Attach a file reader to config. Multiple readers are supported.*/
Kohana::$config->attach(new Config_File);/*** Enable modules. Modules are referenced by a relative or absolute path.*/
// 引入其他模块
Kohana::modules(array('auth'       => MODPATH.'auth',       // Basic authentication'cache'      => MODPATH.'cache',      // Caching with multiple backends'codebench'  => MODPATH.'codebench',  // Benchmarking tool'database'   => MODPATH.'database',   // Database access'image'      => MODPATH.'image',      // Image manipulation'minion'     => MODPATH.'minion',     // CLI Tasks'orm'        => MODPATH.'orm',        // Object Relationship Mapping'unittest'   => MODPATH.'unittest',   // Unit testing'userguide'  => MODPATH.'userguide',  // User guide and API documentation));/*** Cookie Salt* @see  http://kohanaframework.org/3.3/guide/kohana/cookies* * If you have not defined a cookie salt in your Cookie class then* uncomment the line below and define a preferrably long salt.*/
// Cookie::$salt = NULL;
// 如果需要正常启动项目:需要给这个字段设置一个值(string),如Cookie::$salt = 'foobar';
/*** Set the routes. Each route must have a minimum of a name, a URI and a set of* defaults for the URI.*/
// 设置接口的路由规则
Route::set('default', '(<controller>(/<action>(/<id>)))')->defaults(array('controller' => 'welcome','action'     => 'index',));

2、项目结构

在这里插入图片描述

3、路由配置

  • tip:在bootstrap.php文件中配置路由
  • my_app项目放在warmserver的www目录下
  • warmserver重新写虚拟映射之后,需要关闭warmserve再重新启动

3.1、隐藏项目入口的路由

​ kohana项目的入口是application目录下的index.php文件,因此如果需要访问项目的某个接口,需要先访问到项目入口index.php,这样在url上会显得不简洁,因此可以通过配置.htaccess文件,来隐藏url中默认的项目入口。把官网的kahana项目拉下来,项目根目录下会有默认的example.htaccess文件,把前缀名字去掉即可,即变成.htaccess

eg:
前提:需要先使用nginx或者apache服务器映射项目路径跟本地的项目文件映射:http://my_app  =>  D:\PhpCode\kohana-demoD:\PhpCode\kohana-demo路径下即是官网拉下来的kohana项目,重新命名成了kohana-demo
配置前:如果需要访问  http://localhost/my_app项目则需要输入url:http://localhost/my_app/index.php
注意:通过www目录映射的localhost访问www目录下的my_app项目时,url中的index.php不能省略,如http://localhost/my_app/index.php/   中的index.php/不能省略

3.2、配置默认路由

  • 需要注意拉下来的kohana项目默认配置了默认路由
  • 默认的路由配置需要在bootstrap.php文件的最下面,否则默认路由会匹配全部请求,就不会匹配到后面的路由了
  • 默认的路由映射,只要访问到该项目,即默认会路由到该接口,即访问到**/application/classes/Controller/welcome/index**
  • Controller/Welcome.php文件下的action_index方法
  • 在bootstrap.php中配置
Route::set('default', '(<controller>(/<action>(/<id>)))')->defaults(array('controller' => 'welcome','action'     => 'index',));
  • Controller/Welcome.php
<?php defined('SYSPATH') or die('No direct script access.');class Controller_Welcome extends Controller {public function action_index(){$this->response->body('hello world');}} // End Welcome
  • 访问默认的接口/Controller/Welcome/action_index
    • 通过localhost映射的www目录访问:
      • http://localhost/my_app/index.php/ 注意,末尾的/不能省略
    • 通过虚拟域名访问
      • http://myapp/
  • 访问默认的**/Controller/welcome/index**

在这里插入图片描述

3.3、配置自定义的路由(Controller目录下的控制器)

  • /Controller下创建myapi.php文件
<?php defined('SYSPATH') or die('No direct script access.');class Controller_Myapi extends Controller {public function action_get_data(){$this->response->body('myapi');}
}
  • bootstrap.php中配置
// 配置Controller下的某个控制器的路由
Route::set('myapi', 'myapi/<action>')->defaults(array('controller' => 'myapi','action'     => 'index',));
  • 访问接口
    • 通过www文件夹映射的localhost访问:localhost => D:\Env\wamp64\www
      • http://localhost/my_app/index.php/myapi/get_data
    • 通过myapp直接映射项目路径:myapp=>D:\Env\wamp64\www\my_app
      • http://myapp/index.php/myapi/get_data
      • http://myapp/myapi/get_data(省略index.php)
  • 访问**/Controller/myapi/get_data**

在这里插入图片描述

3.4、配置自定义的路由(Controller/directory下的控制器)

  • bootstrap.php中配置
// 配置Controller目录下的某个文件夹下的控制器的路由
Route::set('api', 'api(/<controller>(/<action>))')->defaults(array('directory' => 'api','controller' => 'default','action' => 'index',));
  • 创建Controller/api/game.php文件
<?php defined('SYSPATH') or die('No direct script access.');class Controller_Api_Game extends Controller {public function action_get_data(){$this->response->body('game');}
}
  • 访问接口
    • 通过www文件夹映射的localhost访问:localhost => D:\Env\wamp64\www
      • http://localhost/my_app/index.php/api/game/get_data
    • 通过虚拟映射域名访问:myapp=>D:\Env\wamp64\www\my_app
      • http://myapp/index.php/api/game/get_data
      • 或http://myapp/api/game/get_data(省略index.php)
  • 访问**/Controller/api/game/get_data**

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/175844.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品&#xff0c;支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据&#xff0c;已应用于数百家企业生产&#xff0c;也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…

通过右键用WebStorm、Idea打开某个文件夹或者在某一文件夹下右键打开当前文件夹用上述两个应用

通过右键用WebStorm、Idea打开某个文件夹或者在某一文件夹下右键打开当前文件夹用上述两个应用 通过右键点击某个文件夹用Idea打开 首先打开注册表 win R 输入 regedit 然后找到HKEY_CLASSES_ROOT\Directory\shell 然后右键shell 新建一个项名字就叫 Idea 第一步&#xf…

MVC使用的设计模式

MVC使用的设计模式 一、背景 MVC模式是"Model-View-Controller"的缩写&#xff0c;中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View&#xff0c;或者同时改变两者。只要Controller改变了Model…

Netty Review - 从BIO到NIO的进化推演

文章目录 BIODEMO 1DEMO 2小结论单线程BIO的缺陷BIO如何处理并发多线程BIO服务器的弊端 NIONIO要解决的问题模拟NIO方案一&#xff1a; &#xff08;等待连接时和等待数据时不阻塞&#xff09;方案二&#xff08;缓存Socket&#xff0c;轮询数据是否准备好&#xff09;方案二存…

STM32F103C8 PC13端口无输出原因

如果开启了RTC功能&#xff0c;就要注意PC13端口的设置。要把RTC OUT 由“Disable”改成“No RTC Output”&#xff0c;才行。

docker-compose 部署 MySQL 8

前言 Windows 系统通过 docker-compose 部署 MySQL8.0。 MySQL 配置文件(my.cnf) # 服务端参数配置 [mysqld] usermysql # MySQL启动用户 default-storage-engineINNODB # 创建新表时将使用的默认存储引擎 character-set-serverutf8mb4 # 设置mysql服…

Spring-Spring之AOP底层原理解析---实践(动态代理)

动态代理 代理模式的解释&#xff1a;为其他对象提供一种代理以控制对这个对象的访问&#xff0c;增强一个类中的某个方法&#xff0c;对程序进行扩展。 cglib动态代理 方式一&#xff1a; public class UserService {public void test() {System.out.println("test..…

智能穿戴AR眼镜主板方案定制_MTK平台AR智能眼镜PCB板开发

AR智能眼镜&#xff0c;是采用了多种技术实现增强现实效果&#xff0c;是将虚拟信息和现实场景相结合的智能设备。 AR智能眼镜硬件上&#xff0c;包括多个传感器、显示装置和处理器等。其中&#xff0c;传感器用于捕捉用户的动作和环境信息&#xff0c;如摄像头、陀螺仪、加速…

【Python】 Python 使用 Pillow 处理图像:几何变换

Python 使用 Pillow 处理图像&#xff1a;几何变换 pillow库操作切片、旋转、滤镜、输出文字、调色板等功能一应俱全。 1. 几何变换 Image 包含调整图像大小 resize() 和旋转 rotate() 的方法。前者采用元组给出新的大小&#xff0c;后者采用逆时针方向的角度。 调整大小并…

将VS工程转为Qt的pro工程及VS安装Qt插件后没有create basic .pro file菜单问题解决

目录 1. 前言 2. VS工程转为pro工程 3. 没有create basic .pro file菜单 1. 前言 很多小伙伴包括本人&#xff0c;如果是在Windows下开发Qt程序&#xff0c;偏好用Visual Studio外加装个Qt插件进行Qt开发&#xff0c;毕竟Visual Studio确实是功能强大的IDE&#xff0c;但有时…

SpringCloud微服务:Ribbon负载均衡

目录 负载均衡策略&#xff1a; 负载均衡的两种方式&#xff1a; 饥饿加载 1. Ribbon负载均衡规则 规则接口是IRule 默认实现是ZoneAvoidanceRule&#xff0c;根据zone选择服务列表&#xff0c;然后轮询 2&#xff0e;负载均衡自定义方式 代码方式:配置灵活&#xff0c;但修…

Linux--makefile

一、makefile的作用 makefile是一个文件&#xff0c;是围绕依赖关系和依赖方法的自动化编译工具 一个工程中的源文件有很多&#xff0c;按照不同的类型、功能、模块放在不同的目录中。而makefile定义了一系列的规则来指定&#xff0c;那些文件需要先编译&#xff0c;那些文件…