当前位置: 首页 > news >正文

网站建设多少钱个人网站服务器放置地 网站接入服务提供单位怎么填

网站建设多少钱个人,网站服务器放置地 网站接入服务提供单位怎么填,深圳建筑室内设计网站,wordpress自定义文章排序路由是一个框架中必不可少的组件#xff0c;其作用是把 URL 按照预定规则解析到特定控制器中。我们在这里定义了两种路由规则#xff1a;查询字符串。在路径后面使用问号加参数#xff0c;多个参数用 分隔。在配置文件使用 querystring 表示#控制器/方法?参数1值1其作用是把 URL 按照预定规则解析到特定控制器中。我们在这里定义了两种路由规则查询字符串。在路径后面使用问号加参数多个参数用 分隔。在配置文件使用 querystring 表示#控制器/方法?参数1值1参数2值2http://domain/user/info?namephpchapter10路径以路径的形式将参数和值添加到后面中间用 / 分隔。配置中使用 restful#控制器/方法/参数1/值1/参数2/值2https://domain/user/info/name/php/chapter/100主控制器在目录 core 创建 Controller.php该类继承 Containernamespace core;class Controller extends Container{}主控制器可以添加控制器公共方法如页面渲染 render()错误代码等所有控制器必须继承主控制器。由于主控制器继承 Container因此控制器也是分发器的子类可以通过 register() 获取实例。控制器类类命名规则控制器命名遵循大写开头的驼峰命名规则并且默认添加后缀 Controller控制器文件命名和类命名一样如控制器类 UserController其文件命名为 UserController.php。方法命名规则方法命名遵循小写开头的驼峰命名规则并且默认添加请求方式(如getpostput等)前缀如 getIndex()postUpdate()。以上例 UserController 为例namespace controller;use core\Controller;class UserController extends Controller{/*** HTTP 请求方式为 GET 时有效* url 为 /user/info**/public function getInfo(){}/*** HTTP 请求方式为 POST 时有效* url 为 /user/update**/public function postUpdate(){}}路由解析在 core 目录下创建 Router.php$ cd tinyphp/core$ touch Router.php在构造函数中定义变量namespace core;use dispatcher\Container;class Router extends Container{public $method;public $uri;public $path;public function __construct(){$this-method $_SERVER[REQUEST_METHOD] ?? GET;$this-uri $_SERVER[REQUEST_URI];$this-path $_SERVER[PATH_INFO];}}常见 $_SERVER 字段$_SERVER[PATH_INFO] URL的路径信息如 /user/info$_SERVER[REQUEST_METHOD] 请求方法如 POSTGET$_SERVER[REQUEST_URI] 完整 URL如 /user/info?id1nameLucy在 start() 方法中解析 URLprotected function start(){/*** 也可以写成 Config::get(default.route,querystring);**/$route Config::get(default.route) ?? querystring;//解析 controller 和 action$path explode(/,trim($this-path,/));if (empty($path[0])) {$path[0] Config::get(default.controller,index);}$controller ucfirst($path[0]).Controller;//获取请求方法$method strtolower($this-method);$action $method.ucfirst($path[1] ?? Config::get(default.action,index));//获取参数$args [];if (method_exists($this,$route)) {$args call_user_func_array([$this,$route],[$this-uri]);}return [controller$controller,action$action,args$args];}querystring() 参数解析private function querystring($url){$urls explode(?, $url);if (empty($urls[1])) {return [];}$param_arr [];$param_tmp explode(, $urls[1]);if (empty($param_tmp)) {return [];}foreach ($param_tmp as $param) {if (strpos($param, )) {list($key,$value) explode(, $param);//变量名是否复合规则if (preg_match(/^[A-Za-z_][A-Za-z0-9_]*$/, $key)) {$param_arr[$key] $value;}}}return $param_arr;}querystring 的参数为 ? 后面的部分多个参数用 分隔。restful() 参数解析private function restful($url){$path explode(/, trim(explode(?, $url)[0], /));$params [];$i 2;while (1) {if (!isset($path[$i])) {break;}$params[$path[$i]] $path[$i1] ?? ;$i $i2;}return $params;}restful 的参数为方法后面的路径。完整代码如下namespace core;use dispatcher\Container;class Router extends Container{public $method;public $uri;public $path;public function __construct(){$this-method $_SERVER[REQUEST_METHOD] ?? GET;$this-uri $_SERVER[REQUEST_URI];$this-path $_SERVER[PATH_INFO];}protected function start(){$route Config::get(default.route) ?? querystring;//解析 controller 和 action$path explode(/,trim($this-path,/));if (empty($path[0])) {$path[0] Config::get(default.controller,index);}$controller ucfirst($path[0]).Controller;//获取请求方法$method strtolower($this-method);$action $method.ucfirst($path[1] ?? Config::get(default.action,index));//获取参数$args [];if (method_exists($this,$route)) {$args call_user_func_array([$this,$route],[$this-uri]);}return [controller$controller,action$action,args$args];}/*** 查询字符串参数* 后参数通过分隔**/private function querystring($url){$urls explode(?, $url);if (empty($urls[1])) {return [];}$param_arr [];$param_tmp explode(, $urls[1]);if (empty($param_tmp)) {return [];}foreach ($param_tmp as $param) {if (strpos($param, )) {list($key,$value) explode(, $param);//变量名是否复合规则if (preg_match(/^[A-Za-z_][A-Za-z0-9_]*$/, $key)) {$param_arr[$key] $value;}}}return $param_arr;}/*** 路径参数* 控制器/方法/参数1/值1/参数2/值2**/http://domain/user/info/name/entner?namephpchapter10private function restful($url){$path explode(/, trim(explode(?, $url)[0], /));$params [];$i 2;while (1) {if (!isset($path[$i])) {break;}$params[$path[$i]] $path[$i1] ?? ;$i $i2;}return $params;}}路由调用方式为$router Rouer::start();测试路由在配置文件 app/conf/config.php 中设置默认路由为 querystringreturn [default [controller index,action index,route querystring,//还可以设置为 restful],view [dir layout,file base,]];在 core/Application.php 文件中 run() 方法实现路由调用...public function run(){$router Router::start();echo ;print_r($router);}...启动 PHP 内置服务器$ cd tinyphp/public$ php -S localhost:8080在浏览器中输入 http://localhost:8080/course/document?namephpchapter10输出结果为Array([controller] CourseController[action] getDocument[args] Array([name] php[chapter] 10))同理可以测试 restful 路由规则。调用控制器方法路由解析后获得需要调用的控制器名方法和参数。由于控制器继承分发器后可以通过 register() 获取实例编辑 core/Applicaiton.php...public function run(){$router Router::start();//注意使用命名空间$controller controller\\.$router[controller];$action $router[action];$args $router[args];echo call_user_func_array([$controller::register(),$action],$args);}...通过这种方式可以实现方法调用但是无法控制方法参数比如有时候我们需要在方法参数中使用某个对象实例术语称为依赖注入即把需要使用的实例注入到方法中那么可以通过PHP的高级特性反射来实现。
http://www.zqtcl.cn/news/532434/

相关文章:

  • 众创空间网站建设wordpress上传与安装包
  • 公司网站怎么做seo关键词排名优化销售
  • 企业网站建设如何去规划广西南宁网站建设哪家好
  • 类似头条的网站怎么做长丰县住房和城乡建设局网站
  • 密云青岛网站建设腾讯云cdn加速wordpress
  • windows 2008 iis添加网站长虹电视网站建设中
  • 金华网站建设公司哪家好沧州南皮网站建设公司
  • 站群网站程序软装设计师资格证
  • 邵阳经开区网站永康市住房建设局网站
  • 能够做代理的网站有哪些问题wordpress 建站视频
  • 凡科网做网站好吗厦门电商培训
  • 建立网站的目录结构时最好的做法是wordpress 恢复默认
  • 我需要把网站做东莞营销外包公司
  • 平台型网站制作住房和城乡建设网站 上海
  • 个人网站可以如果做淘宝客WordPress用quic
  • 建设网站要什么广告设计专业有什么可从事的工作
  • 网站开发上传视频教程济南网站建站模板
  • 深圳市城乡和建设局网站有哪些ui的设计网站
  • vs2010网站开发源码音乐网站设计怎么做
  • 长沙县政务网站网站色彩的应用
  • 成都哪家公司做网站好百度关键词搜索热度
  • 单位写材料素材网站深圳建设外贸网站
  • 做网站如何赚钱景区网站建设的意义
  • 常用网站开发语言的优缺点口碑好的网站建设哪家好
  • 昆明找工作哪个网站好企业管理咨询包括哪些
  • 网站建设需要c语言吗ui设计培训大概多少钱
  • 门户网站开发语言响应式网站 图片尺寸奇数
  • 域外网站是山东城乡建设厅网站
  • 广州网站建设公司乐云seo598学创杯营销之道模板
  • 中国十大黑科技黑帽seo技巧