关于thinkphp 3.2模块分组如何访问非默认模块

t_h_e 2016-01-11 06:42:21
这是已设置的访问列表。

这是Application下的目录结构。

我现在访问我的域名http://localhost是访问Mobile的内容。请问我地址该怎么填写才能访问到Manage里面的内容?

...全文
279 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
码无边 2016-01-12
  • 打赏
  • 举报
回复
访问非默认模块,需要根据你的路由来
果酱很好吃 2016-01-11
  • 打赏
  • 举报
回复
http://localhost/?m=Manage&c=控制器&a=方法 控制器 和 方法 默认都是 index
一、ThinkPHP3.2仿京东实战电子商城开发项目 第一天 1.项目说明 2.时间插件、XSS过滤、在线编辑器使用 3.商品的删除 4.商品的修改完成-一张表的操作全部完成 5.tp中使用AJAX提交表单 6.把模板套到项目中 7. 管理员的登录 第二天 1.锁机制 2.时间插件、XSS过滤、在线编辑器使用 3.商品的删除 4.商品的修改完成-一张表的操作全部完成 5.tp中使用AJAX提交表单 6.把模板套到项目中 7. 管理员的登录 第三天 1.模板布局 2.图片上传函数、代码生成器使用 3.代码生成器的使用 4.RBAC建表和生成基本的代码 5.RBAC-完成添加角色和权限的功能-1 5.RBAC-完成添加角色和权限的功能-2 6.选择权限时JS的智能选择 7.角色完成 第四天 1.管理员管理 2.RBAC-权限的验证-完成 3.商品模块需求分析 4.商品模块表结构设计 5.类型管理 第五天 1.商品表的设计 2.商品模块-添加商品的表单制作-1 3.商品模块-添加商品的表单制作-2 4.商品模块-处理添加商品的表单-1 5.商品模块-处理添加商品的表单-完成 第六天 1.商品修改表单的制作-1 2.商品修改表单的制作-2 3.处理商品修改的表单-1 4.处理商品修改的表单完成 5.商品删除-回收站-还原 第七天 1.商品模块表结构设计 2.商品库存表单的制作 3.库存量的添加处理 4.库存量的修改完成 5.趣味题:打印矩阵-苹果篮子-字符串截取 6.前台网站优化思路 7.前台公共模板的制作 第八天 1.首页-分类树数据的获取 2.商品推荐数据的获取-疯狂抢购 3.首页添加缓存功能 4.会员注册 5.会员验证与登录 6.登录的验证 第九天 1.商品详情页-1 2.商品详情页的缓存 3.会员价格 4.最近浏览 5.最近浏览0完成 6.商品评论-判断登录状态并实现登录之后的跳转 第十天 1.ajax发表评论 2.ajax获取加载评论 3.评论的优化 4.加入购物车 5.购物车列表 6.购物车的修改 7.AJAX跨域-jsonp 第十一天 1.下定单-1 2.下定单-2 3.只能购买在购物车中勾选的商品 4.支付宝支付-1-制作去支付宝的按钮 5.支付宝集成-2-完成 6.网站上线并在QQ互联中创建一个APP 7.QQ登录集成完成 第十二天 1.后台分类筛选属性的添加 2.后台分类筛选属性修改完成 3.搜索页面中获取搜索的分类下的筛选属性 4.搜索页面价格与属性的获取完成 5.获取商品销量和评论数并根据价格和分类搜索商品 6.商品的排序 7.商品属性的搜索 附件:课程全部资料(课件+源码) 模板 二、ThinkPHP3.2框架加强 ThinkPHP基础加强 01-搭建应用 02-前台页面搭建 03-后台页面搭建 04-布局设置 05-验证码制作并显示 06-验证码校验 07-验证用户名 08-后台管理员登录系统实现 09-附件上传(商品的添加和展示) 10-附件上传逻辑 11-制作缩略图 12-自定义工具类实现分页效果 13-前台用户注册效果 14-表单验证和自动完成 15-redis案例存储-最新登录的前5个用户 ThinkPHP RBAC讲解 01-RBAC-介绍(已加密) 02-RBAC-数据模拟 03-RBAC-不同用户登录系统显示对应权限 04-RBAC-给admin开放绝对权限 05-RBAC-分配权限表单展示 06-RBAC-角色分配权限-收集表单信息 07-RBAC-显示默认拥有的权限 08-RBAC-权限列表展示 09-RBAC-添加权限实现 10-RBAC-访问权限控制 11-RBAC-禁止未登陆用户访问系统 12-RBAC-tp框架使用jquery
ThinkPHP3.2 集成 php-resque: PHP Resque Worker =========================================== php-resque是php环境中一个轻量级的队列服务。具体队列服务是做什么用的,请自行百度! ## 运行环境 ## * PHP 5.2+ * Redis 2.2+ ## 集成方法 ## ### 将源码放到ThinkPHP的Vendor目录中 ### 将源码更新到 ThinkPHP/Library/Vendor/php-resque/ 目录中 注意要定义应用目录,之前发的内容没定义应用目录导致部分小伙伴引发了找不到Queue类的异常 ### 在项目根目录中创建resque入口脚本 ### #!/usr/bin/env php <?php ini_set('display_errors', true); error_reporting(E_ERROR); set_time_limit(0); // 定义应用目录 define('APP_PATH','./Application/'); define('MODE_NAME', 'cli'); // 自定义cli模式 define('BIND_MODULE', 'Home'); // 绑定到Home模块 define('BIND_CONTROLLER', 'Queue'); // 绑定到Queue控制器 define('BIND_ACTION', 'index'); // 绑定到index方法 // 处理自定义参数 $act = isset($argv[1]) ? $argv[1] : 'start'; putenv("Q_ACTION={$act}"); putenv("Q_ARGV=" . json_encode($argv)); require './ThinkPHP/ThinkPHP.php'; ### 创建Queue控制器 ### 在`Home`模块的`Controller`中创建`Queue`控制器 <?php namespace Home\\\\\\\\Controller; if (!IS_CLI) die('The file can only be run in cli mode!'); use Exception; use Resque; /*** * queue入口 * Class Worker * @package Common\\\\\\\\Controller */ class QueueController { protected $vendor; protected $args = []; protected $keys = []; protected $queues = '*'; public function __construct() { vendor('php-resque.autoload'); $argv = json_decode(getenv('Q_ARGV')); foreach ($argv as $item) { if (strpos($item, '=')) { list($key, $val) = explode('=', $item); } else { $key = $val = $item; } $this->keys[] = $key; $this->args[$key] = $val; } $this->init(); } /** * 执行队列 * 环境变量参数值: * --queue|QUEUE: 需要执行的队列的名字 * --interval|INTERVAL:在队列中循环的间隔时间,即完成一个任务后的等待时间,默认是5秒 * --app|APP_INCLUDE:需要自动载入PHP文件路径,Worker需要知道你的Job的位置并载入Job * --count|COUNT:需要创建的Worker的数量。所有的Worker都具有相同的属性。默认是创建1个Worker * --debug|VVERBOSE:设置“1”启用更啰嗦模式,会输出详细的调试信息 * --pid|PIDFILE:手动指定PID文件的位置,适用于单Worker运行方式 */ private function init() { $is_sington = false; //是否单例运行,单例运行会在tmp目录下建立一个唯一的PID // 根据参数设置QUEUE环境变量 $QUEUE = in_array('--queue', $this->keys) ? $this->args['--queue'] : '*'; if (empty($QUEUE)) { die("Set QUEUE env var containing the list of queues to work.\n"); } $this->queues = explode(',', $QUEUE); // 根据参数设置INTERVAL环境变量 $interval = in_array('--interval', $this->keys) ? $this->args['--interval'] : 5; putenv("INTERVAL={$interval}"); // 根据参数设置COUNT环境变量 $count = in_array('--count', $this->keys) ? $this->args['--count'] : 1; putenv("COUNT={$count}"); // 根据参数设置APP_INCLUDE环境变量 $app = in_array('--app', $this->keys) ? $this->args['--app'] : ''; putenv("APP_INCLUDE={$app}"); // 根据参数设置PIDFILE环境变量 $pid = in_array('--pid', $this->keys) ? $this->args['--pid'] : ''; putenv("PIDFILE={$pid}"); // 根据参数设置VVERBOSE环境变量 $debug = in_array('--debug', $this->keys) ? $this->args['--debug'] : ''; putenv("VVERBOSE={$debug}"); } public function index() { $act = getenv('Q_ACTION'); switch ($act) { case 'stop': $this->stop(); break; case 'status': $this->status(); break; default: $this->start(); } } /** * 开始队列 */ public function start() { // 载入任务类 $path = COMMON_PATH . "Job"; $flag = \FilesystemIterator::KEY_AS_FILENAME; $glob = new \FilesystemIterator($path, $flag); foreach ($glob as $file) { if('php' === pathinfo($file, PATHINFO_EXTENSION)) require realpath($file); } $logLevel = 0; $LOGGING = getenv('LOGGING'); $VERBOSE = getenv('VERBOSE'); $VVERBOSE = getenv('VVERBOSE'); if (!empty($LOGGING) || !empty($VERBOSE)) { $logLevel = Resque\Worker::LOG_NORMAL; } else { if (!empty($VVERBOSE)) { $logLevel = Resque\Worker::LOG_VERBOSE; } } $APP_INCLUDE = getenv('APP_INCLUDE'); if ($APP_INCLUDE) { if (!file_exists($APP_INCLUDE)) { die('APP_INCLUDE (' . $APP_INCLUDE . ") does not exist.\n"); } require_once $APP_INCLUDE; } $interval = 5; $INTERVAL = getenv('INTERVAL'); if (!empty($INTERVAL)) { $interval = $INTERVAL; } $count = 1; $COUNT = getenv('COUNT'); if (!empty($COUNT) && $COUNT > 1) { $count = $COUNT; } if ($count > 1) { for ($i = 0; $i < $count; ++$i) { $pid = pcntl_fork(); if ($pid == -1) { die("Could not fork worker " . $i . "\n"); } // Child, start the worker else { if (!$pid) { $worker = new Resque\Worker($this->queues); $worker->logLevel = $logLevel; fwrite(STDOUT, '*** Starting worker ' . $worker . "\n"); $worker->work($interval); break; } } } } // Start a single worker else { $worker = new Resque\Worker($this->queues); $worker->logLevel = $logLevel; $PIDFILE = getenv('PIDFILE'); if ($PIDFILE) { file_put_contents($PIDFILE, getmypid()) or die('Could not write PID information to ' . $PIDFILE); } fwrite(STDOUT, '*** Starting worker ' . $worker . "\n"); $worker->work($interval); } } /** * 停止队列 */ public function stop() { $worker = new Resque\Worker($this->queues); $worker->shutdown(); } /** * 查看某个任务状态 */ public function status() { $id = in_array('--id', $this->keys) ? $this->args['--id'] : ''; $status = new \Resque\Job\Status($id); if (!$status->isTracking()) { die("Resque is not tracking the status of this job.\n"); } echo "Tracking status of " . $id . ". Press [break] to stop.\n\n"; while (true) { fwrite(STDOUT, "Status of " . $id . " is: " . $status->get() . "\n"); sleep(1); } } } ### 新增队列配置 ### 在公共`config.php`中新增队列配置,如下 /* 消息队列配置 */ 'QUEUE' => array( 'type' => 'redis', 'host' => '127.0.0.1', 'port' => '6379', 'persistent' => false, //是否启用 'prefix' => 'queue', 'password' => '', // 密码 ), ### 新增队列初始化行为 ### 在`app_init`行为中新增队列初始化的行为,`run`内容为 public function run() { // 处理队列配置 $config = C('QUEUE'); if ($config) { vendor('php-resque.autoload'); // 初始化队列服务 $select = isset($config['select']) ? $config['select'] : 0; $password = isset($config['password']) ? $config['password'] : null; $persistent = isset($config['persistent']) ? $config['persistent'] : false; $timeout = isset($config['timeout']) ? $config['timeout'] : 30; $server = $config['host'] . ":" . $config['port']; \Resque::setBackend($server, $select, $password, $persistent, $timeout); // 初始化缓存前缀 if(isset($config['prefix']) && !empty($config['prefix'])){ \Resque\Redis::prefix($config['prefix']); } } } 到此,整个队列服务基本已配置完成。 接下来就要创建队列执行的任务了 ## Jobs ## ### 创建 Jobs ### 目前任务类固定在`Common`模块的`Job`中,命名格式为`XxxxJob.class.php` <?php namespace Common\Job; class XxxxJob { public function perform() { $args = $this->args; fwrite(STDOUT, json_encode($args) . PHP_EOL); } } 要获取队列中传入的参数值请使用`$this->args` 任务perform方法中抛出的任何异常都会导致任务失败,所以在写任务业务时要小心,并且处理异常情况。 任务也有`setUp`和`tearDown`方法,如果定义了一个`setUp`方法,那么它将在`perform`方法之前调用,如果定义了一个`tearDown`方法,那么它将会在`perform`方法之后调用。 <?php namespace Common\Job; class XxxxJob { public function setUp() { // ... Set up environment for this job } public function perform() { // .. Run job } public function tearDown() { // ... Remove environment for this job } } ### 添加任务到队列中 ### 在程序控制器的任意方法中引入队列类库时,使用`Resque::enqueue`方法执行入栈,`Resque::enqueue`方法有四个参数,第一个是当前的队列名称,第二个参数为任务类,第三个是传入的参数,第四个表示是否返回工作状态的令牌 vendor('php-resque.autoload'); // 引入队列类库 $job = '\\Common\\Job\\XxxxJob'; // 定义任务类 // 定义参数 $args = array( 'time' => time(), 'array' => array( 'test' => 'test', ), ); // 入栈 $jobId = \Resque::enqueue('default', $job, $args, true); echo "Queued job ".$jobId."\n\n"; 如果要查看当前任务的工作状态可以使用如下方法: $status = new \Resque\Job\Status($jobId); echo $status->get(); // Outputs the status 任务的工作状态值有专门的常量``\Resque\Job\Status``对应类。 具体的对应关系如下: * `Resque\Job\Status::STATUS_WAITING` - 任务在队列中 * `Resque\Job\Status::STATUS_RUNNING` - 任务正在运行 * `Resque\Job\Status::STATUS_FAILED` - 任务执行失败 * `Resque\Job\Status::STATUS_COMPLETE` - 任务执行完成 * `false` - 无法获取状态 - 检查令牌是否有效? 任务的过期时间为任务完成后的24小时后,也可以定义过期类的`stop()`方法 ## 队列任务启动 ## 在命令行中转到项目根目录,执行 $ php resque start 即可启动服务 启动时也可以加入部分参数: * `--queue` - 需要执行的队列的名字,可以为空,也可以多个以`,`分割 * `--interval` -在队列中循环的间隔时间,即完成一个任务后的等待时间,默认是5秒 * `--count` - 需要创建的Worker的数量。所有的Worker都具有相同的属性。默认是创建1个Worker * `--debug` - 设置“1”启用更啰嗦模式,会输出详细的调试信息 * `--pid` - 手动指定PID文件的位置,适用于单Worker运行方式 如: $ php resque start --queue=default --pid=/tmp/resque.pid --debug=1 如果要使用守护进程方式启动则需要在最后加入`&`即可 如: $ php resque start --queue=default --pid=/tmp/resque.pid --debug=1 & 也可以配合supervisord实现进程长驻 更多的操作请参考php-resque官方文档。
目 录 第1章 ThinkPHP入门 1 1.1MVC模式概述 1 1.2ThinkPHP是什么 2 1.3 搭建PHP开发环境 2 1.3.1获取UPUPW 2 1.3.2安装UPUPW 3 1.3.3目录结构说明 4 1.3.4添加虚拟主机 4 1.3.5安装集成开发环境PHPStorm 6 1.4 个ThinkPHP程序 7 1.5 应用结构说明 8 1.5.1目录说明 8 1.5.2入口文件 8 1.5.3自动生成 9 1.5.4模块 9 1.5.5控制器 9 1.6 术语解释 1.7 小结 11 第2章 配 置 12 2.1 配置类型 13 2.1.1默认配置 13 2.1.2公共配置 13 2.1.3模式配置 13 2.1.4调试配置 14 2.1.5场景配置 14 2.1.6模块配置 14 2.1.7扩展配置 14 2.1.8动态配置 15 2.2 配置操作 15 2.2.1C函数 16 2.2.2读取配置 17 2.2.3加载扩展配置 19 2.2.4写入配置 20 2.3 小结 23 第3章 路 由 24 3.1URL的三种模式 24 3.1.1动态URL 24 3.1.2静态URL 25 3.1.3伪静态URL 25 3.2ThinkPHP的路由 25 3.2.1路由模式 25 3.2.2路由配置 29 3.3 小结 34 第4章 控制器 35 4.1 控制器的定义 35 4.2 前置操作和后置操作 37 4.3 动作参数绑定 38 4.4 伪静态 40 4.5URL大小写 40 4.6URL生成 41 4.6.1地址表达式 41 4.6.2参数 41 4.6.3伪静态后缀 41 4.6.4URL模式处理 41 4.6.5生成路由地址 42 4.7Ajax返回 42 4.8 重定向和页面跳转 43 4.8.1重定向 43 4.8.2页面跳转 44 4.9HTTP请求方法 46 4.读取输入 48 4.11空操作 50 4.12空控制器 51 4.13小结 52 第5章 模 型 53 5.1 准备工作 53 5.2 模型定义 54 5.3 模型实例化 54 5.3.1new实例化 54 5.3.2M函数实例化 55 5.3.3D函数实例化 55 5.3.4空模型实例化 55 5.4 连贯操作 55 5.4.1where 56 5.4.2table 57 5.4.3alias 57 5.4.4data 58 5.4.5field 58 5.4.6order 59 5.4.7limit 60 5.4.8page 61 5.4.9group 61 5.4.having 61 5.4.11join 61 5.4.12union 62 5.4.13distinct 62 5.4.14lock 62 5.4.15cache 63 5.4.16fetchSql 63 5.4.17strict 64 5.4.18index 64 5.5CURD操作 64 5.5.1创建数据 64 5.5.2插入数据 65 5.5.3读取数据 65 5.5.4更新数据 66 5.5.5删除数据 67 5.6 查询语言 68 5.6.1查询方式 68 5.6.2表达式查询 68 5.6.3快捷查询 70 5.6.4区间查询 71 5.6.5统计查询 71 5.7 自动验证 72 5.8 自动完成 78 5.9 视图模型 82 5.关联模型 85 5..1HAS_ONE 85 5..2BELONGS_TO 88 5..3HAS_MANY 89 5..4MANY_TO_MANY 90 5.11小结 91 第6章 视 图 92 6.1 模板定义 92 6.2 模板主题 92 6.3 模板赋值 93 6.4 模板渲染 93 6.5 总结 94 第7章 模 板 95 7.1 变量输出 95 7.1.1输出形式 95 7.1.2测试 96 7.2 系统变量 98 7.2.1语法形式 98 7.2.2配置输出 98 7.2.3测试 98 7.3 函数 0 7.3.1函数类型 0 7.3.2测试 0 7.4 变量默认值 1 7.4.1语法形式 1 7.4.2测试 2 7.5 算术运算符 3 7.5.1语法形式 3 7.5.2测试 3 7.6 模板继承 5 7.6.1语法形式 5 7.6.2测试 6 7.7 视图含 7 7.7.1语法形式 7 7.7.2模板表达式 7 7.7.3模板文件 7 7.7.4测试 7 7.8 内置标签 8 7.8.1volist标签 9 7.8.2foreach标签 1 7.8.3for标签 1 7.8.4switch标签 111 7.8.5比较标签 111 7.8.6empty标签 114 7.8.7defined标签 114 7.8.8标签嵌套 114 7.8.9import标签 115 7.8.使用原生PHP 115 7.8.11不解析输出 115 7.9 模板布局 116 7.模板常量替换 116 7.11模板注释 117 7.12测试 118 7.13总结 126 第8章 调 试 127 8.1 调试模式 127 8.2 异常处理 127 8.3 日志 128 8.3.1日志级别 129 8.3.2记录方式 129 8.3.3写入日志 129 8.4 变量输出 130 8.5 执行统计 130 8.6SQL输出 131 8.7 测试 131 8.7.1异常测试 131 8.7.2日志测试 132 8.7.3变量输出测试 133 8.7.4执行统计测试 133 8.7.5SQL输出测试 134 8.8 总结 135 第9章 缓 存 136 9.1 数据缓存 136 9.1.1写入缓存 136 9.1.2读取缓存 136 9.1.3删除缓存 137 9.2 页面缓存 137 9.3 数据库查询缓存 138 9.4 总结 139 第章 专 题 140 .1session操作 140 .1.1session写入 140 .1.2session读取 140 .1.3session删除 140 .2cookie操作 141 .2.1cookie写入 141 .2.2cookie读取 141 .2.3读取所有cookie 141 .2.4cookie删除 141 .3分页 141 .3.1分页语法 141 .3.2测试 142 .4文件上传 145 .5验证码 146 .6图像处理 149 .6.1实例化Image 149 .6.2获取图片基本信息 149 .6.3图像裁剪 150 .6.4图像缩略图 151 .6.5水印 152 .7总结 153 第11章 留言板项目实战 154 11.1项目目的 154 11.2项目需求 154 11.3数据表设计 154 11.4模块设计 155 11.5编码实现 155 11.5.1编写模型 155 11.5.2编写留言控制器 156 11.5.3编写用户控制器 159 11.5.4编写留言列表 162 11.5.5编写留言发表页面 163 11.5.6编写用户登录界面 163 11.5.7编写用户注册页面 164 11.6运行效果 165 11.6.1留言界面 165 11.6.2用户登录 166 11.6.3登录后留言列表 166 11.6.4发表留言 166 11.6.5留言成功 166 11.6.6注册页面 167 11.7项目总结 167 第12章 系统项目实战 168 12.1项目目的 168 12.2需求分析 168 12.3功能设计 168 12.4数据库设计 169 12.5数据库字典 169 12.6模块设计 171 12.6.1Admin模块 171 12.6.2Common模块 175 12.6.3Home模块 177 12.7项目总结 182 第13章 论坛系统项目实战 183 13.1项目目的 183 13.2功能设计 183 13.3数据库设计 183 13.4数据库字典 184 13.5模块设计 186 13.5.1Common模块 186 13.5.2Admin模块 190 13.5.3Home模块 192 13.6项目总结 193 第14章 公众号开发 195 14.1项目目的 195 14.2功能设计 195 14.3开通测试公众号 196 14.4下载开发类库 197 14.5开始会话开发 197 14.5.1注册流程 199 14.5.2登录流程 200 14.5.3查看个人资料流程 200 14.5.4上传头像流程 200 14.5.5退出登录流程 200 14.5.6全局回复处理 201 14.5.7示例代码 201 14.5.8测试 212 14.6自定义菜单开发 213 14.6.1获取AccessToken 213 14.6.2创建自定义菜单 214 14.6.3响应自定义菜单 216 14.7项目总结 216 结 语 217

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧