• tp5.0入门笔记


    项目方案

    基本用法和api配置

    设置public为根目录

    phpstudy 自行百度设置

    隐藏入口文件

    phpstudy环境下,下载tp5.0自带的重新文件无效,需要使用下面的设置

    <IfModule mod_rewrite.c>
      Options +FollowSymlinks -Multiviews
      RewriteEngine On
    
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
    </IfModule>
    

    效果:

    url地址变化
    隐藏之前index.php/控制器/方法 
    隐藏之后/控制器/方法
    

    模块绑定

    在入口文件中设置

    前台绑定为wxapi

    // 绑定前台
    define('BIND_MODULE', 'index');
    

    后台绑定为admin

    // 绑定后台
    define('BIND_MODULE', 'admin');
    

    路由设置

    作用

    1. 简化URL地址,方便大家记忆
    2. 有利于搜索引擎的优化

    基本概念

    路由三模式
    模式 url_route_on url_route_must 描述 形式
    普通模式 false false 关闭路由,完全使用默认的PATH_INFO方式URL index.php/模块/控制器/方法
    混合模式 true false 开启路由,并使用路由定义+默认PATH_INFO方式的混合
    强制模式 true true 开启路由,并设置必须定义路由才能访问
    1. 路由只针对应用,不针对模块,因此路由的设置也是针对应用下面的所有模块。

    2. 如果某些模块不想使用路由的话,关闭路由

       在后台入口文件中增加关闭路由配置(必须写在 加载引导文件之后)
       	hinkApp::route(false);
      

    项目配置

    1. 前台使用简写模式

    2. 后台使用常规模式

       admin.php 最后
       // 关闭admin模块的路由
       	hinkApp::route(false);
      

    设置路由

    1. 设置路由格式

       Route::rule(‘路由表达式’, ‘路由地址’, ‘请求类型’, ‘路由参数(数组)’, ‘变量规则(数组)’)
      
    2. 设置路由文件(根目录application oute.php)

    3. 设置路由之后就不能使用PATH_INFO形式访问

    4. 基本设置

       <?php
       use thinkRoute;
       Route::rule('/','index/index/index');
      
    路由的形式

    静态地址路由

    Route::rule('/test','index/index/test');
    

    1、路由带参数:

    • 一个参数

      Route::rule(‘blog/:uid’,‘index/index/blog’);

    • 多个参数

      Route::rule(‘blog/:year/:month’,‘index/index/blog’);
      //(两个参数,只要有一个没有写就会报错)

    后台接收参数

    index.php中
    function blog(){
    	// 一个参数
        return input('uid');
        // 多个参数
        return input('year').input('month');
    }
    

    2、可选参数路由:

    Route::rule('time/:year/[:month]','index/index/time');
    

    3、全动态路由:

    Route::rule(':a/:b','index/index/time');
    

    4、完全匹配路由:

    Route::rule('test$','index/index/test');
    
                   //http://www.tp5.net/test 可以成功访问
                  //http://www.tp5.net/num/4 不能成功访问
    

    5、额外带参数:(比如微信用户验证时需要

    Route::rule('test','index/index/test?status=1&app_id=5');
    

    6、miss路由

    Route:rule([
    	'news/:id'=>'index/News/lists',
    	'blog/:id'=>'index/Blog/lists',
    	'__miss__'  => 'public/miss' // 路径为index/Public/miss
    ])
    

    7、url生成
    当配置路由为:Route.rule([‘blog’,‘blod/:id’],‘index/blog/lists’)

    url地址有两种写法:

    1. Url:build(‘index/blog/lists’, [‘id’=>666])
    2. build(‘index/blog/lists’, [‘id’=>666])

    当配置的路由有别名时可以简写为 build('blog', ['id'=>666])

    8、快捷路由

    Route.php
    Route::controller('user','index/User');
    
    User.php
    namespace appindexcontroller;
    class User {
    	public function getInfo()
    	{
    		
    	}
    	public function getPhone()
    	{
    	
    	}
    	public function deleteInfo()
    	{
    
    	}
    }
    

    访问地址

    get /user/info 
    get /user/phone
    delete /user/info
    

    9、别名操作&操作方法黑白名单

    Route::alias('comment','index/comment',[
        'ext'=>'html',
        'allow'=>'index,read,save,edit', // 允许
        'except'=>'delete', // 禁止
        'method'=>['index'=>'GET','read' => 'GET', 'save'=>'POST', 'edit' => 'PUT']
    ]);
    

    配置文件写法

    return [
    	'__alias__' =>  [
    	      'comment'  =>  ['index/comment',['ext'=>'html']],
    	  ],
    ];
    

    10、资源路由

    Route::resource(‘blog’,‘index/blog’);

    设置后会自动注册7个路由规则,如下:

    Route::get(['index', 'blog'], 'index/blog'); // 默认 index 博客列表
    Route::get(['create', 'blog/create'], 'index/blog/create'); // 默认 create 添加博客
    Route::post(['save', 'blog'],'index/blog/save'); // 默认 save 保存博客
    Route::get(['read', 'blog/:id'], 'index/blog/read'); // 默认 read 查看博客详情
    Route::get(['edit', 'blog/:id/edit'], 'index/blog/edit'); // 默认 edit 编辑博客显示页面
    Route::put(['update', 'blog/:id'], 'index/blog/update'); // 默认 update 编辑博客
    Route::delete(['delete', 'blog/:id'], 'index/blog/update'); // 默认 delete 删除博客
    

    或者在路由配置文件中使用__rest__添加资源路由定义:

    return [
    	// 定义资源路由
    	'__rest__'	=> [
    		'blog'	=> 'index/blog'
    	]
    ]
    
    namespace appindexcontroller;
    class Blog {
    	public function index()
    	{
    
    	}
    	
    	public function read($id)
    	{
    
    	}
    	
    	public function edit($id)
    	{
    
    	}
    
    }
    

    更改默认参数

    Route::resource('blog','index/blog',['var'=>['blog'=>'blog_id']]);
    
    ...
    	public function read($blog_id)
    	{
    
    	}
    ...
    

    黑白名单

    Route::resource('blog','index/blog',[
    	'only'=>['index','read','edit','update'],
    	'except'=>['delete'] // 禁止删除
    ]);
    

    如果需要更改某个资源路由标识的对应操作,可以使用下面方法:

    Route::rest('create',['GET', '/add','add']);
    

    设置之后,URL访问变为:

    http://serverName/blog/create
    变成
    http://serverName/blog/add
    

    创建blog页面的对应的操作方法也变成了add

    批量

    Route::rest([
    ‘save’ => [‘POST’, ‘’, ‘store’],
    ‘update’ => [‘PUT’, ‘/:id’, ‘save’],
    ‘delete’ => [‘DELETE’, ‘/:id’, ‘destory’],
    ]);

    嵌套路由

    Route::resource('blog.comment','index/comment');
    

    访问如下地址:
    http://serverName/blog/128/comment/32
    http://serverName/blog/128/comment/32/edit

    生成的路由规则分别是:

    blog/:blog_id/comment/:id
    blog/:blog_id/comment/:id/edit
    

    Comment控制器对应的操作方法如下:

    namespace appindexcontroller;
    class Comment{
    	public function edit($id,$blog_id){
    	}
    }
    

    edit方法中的参数顺序可以随意,但参数名称必须满足定义要求。

    11、路由方式

    1)[模块/控制器/]操作?参数1=值1&参数2=值2…

    2)@[模块/控制器/]操作

    与1)本质的区别是直接执行某个控制器类的方法,而不需要去解析 模块/控制器/操作这些,同时也不会去初始化模块

    设置路由

    'blog/:id'=>'@index/blog/read',
    

    系统会直接执行

    Loader::action('index/blog/read');
    

    由于没有定义当前模块名、当前控制器名和当前方法名 ,从而导致视图的默认模板规则失效

    所以这种情况下面,如果使用了视图模板渲染,则必须传入明确的参数。

    3)类的命名空间类名@方法名 || 类的命名空间类名::方法名

    可以支持执行任何类的方法,而不仅仅是执行控制器的操作方法

    'blog/:id'=>'appindexserviceBlog@read',
    

    执行的是 appindexserviceBlog类的read方法。

    4)路由到重定向地址(迁移网站时有用

    路由地址以“/”或者“http”开头则会认为是一个重定向地址或者外部地址

    'blog/:id'=>'/blog/read/id/:id'
    

    12、路由分组

    路由分组功能允许把相同前缀的路由定义合并分组,这样可以提高路由匹配的效率,不必每次都去遍历完整的路由规则。

    'blog/:id'   => ['Blog/read', ['method' => 'get'], ['id' => 'd+']],
    'blog/:name' => ['Blog/read', ['method' => 'post']],
    

    分组:

    '[blog]'     => [
    	':id'   => ['Blog/read', ['method' => 'get'], ['id' => 'd+']],
    	':name' => ['Blog/read', ['method' => 'post']],
    ],
    

    使用Route类的group方法进行注册,如下:

    Route::group('blog',[
    	':id'   => ['Blog/read', ['method' => 'get'], ['id' => 'd+']],
    	':name' => ['Blog/read', ['method' => 'post']],
    ]);
    

    定义公用的路由设置参数

    Route::group('blog',[
    	':id'   => ['Blog/read', [], ['id' => 'd+']],
    	':name' => ['Blog/read', [],
    ],['method'=>'get','ext'=>'html']);
    

    闭包方式 略

    嵌套分组

    Route::group(['method'=>'get','ext'=>'html'],function(){
    	Route::group('blog',function(){
    		Route::rule('blog/:id','blog/read',[],['id'=>'d+']);
    		Route::rule('blog/:name','blog/read',[],['name'=>'w+']);
    	}
    });
    

    命令行

    命令行生成目录结构

    配置build.php

    命令行生成

    配置好php环境变量
    切入到根目录下

    php think build
    php think build --config 配置文件名
    

    这里的build执行的是application目录下的build.php 而非根目录下的。

    添加自动生成代码

    入口文件,比如index.php下加上

    // 读取自动生成定义文件
    $build = include 'build.php';
    // 运行自动生成
    // 第二个参数 命名空间 默认app
    // 第三个参数 是否使用类后缀 默认为false 设置为true 会生成controller和model这样的目录名后缀,比如indexController.php
    	hinkBuild::run($build,'app',false);
    
    使用默认配置
    	hinkBuild::module('admin');
    

    创建类库文件

    快速生成控制器类

    执行下面的指令可以生成index模块的Blog控制器类库文件

    php think make:controller index/Blog
    

    如果仅仅生成空的控制器则可以使用:

    php think make:controller indexBlog --plain
    
    快速生成模型类

    执行下面的指令可以生成index模块的Blog模型类库文件

    php think make:model index/Blog
    
    自定义命令

    待续…

    mysql

    调试

    echo User::getLastSql();
    

    开启调试

    修改一下php.ini中的 variables_order = “GPCS”。需要多添加一个E,即

    variables_order = “EGPCS”。

    重启服务器

    在根目录下新建.env文件

    'app_debug' => true
    

    原本的配置文件设置将无效


  • 相关阅读:
    楔入式侧链原理
    侧链带来的问题
    侧链的应用方向
    node.js 读取yaml文件
    用Visual Studio Code写Node.js
    Express中server和路由分离
    Nodejs开发框架Express4.x开发手记
    node.js express使用websocket
    Nodejs 发送HTTP POST请求实例
    rabbitMQ消息队列原理
  • 原文地址:https://www.cnblogs.com/huangjunjia/p/13068179.html
Copyright © 2020-2023  润新知