thinkphp5.0 mvc问题

永动bug制造机 2016-04-22 09:56:53
小弟接触php也有段时间 不过也是改改逻辑代码 初次涉及框架模块 遇到个问题
看了开发文档尝试添加一个user模块
在application里添加
user/controller/user.php

<?php
namespace app\user\controller;

class User
{
public function Login()
{
return "登录";
}
}

然后在浏览器访问
http://127.0.0.1:8096/public/index.php/user/login
提示如下错误


Exception in Loader.php line 349
class [ app\user\controller\Login ] not exists


因为index/index能访问 然后尝试在index/controller/index.php
添加

public function home()
{
return 'home page';
}

提示同样错误


Exception in Loader.php line 349
class [ app\index\controller\Home ] not exists


特来请教下前辈们 小弟哪里搞错了
...全文
504 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2016-04-22
  • 打赏
  • 举报
回复
URL解析和路由后,会把当前的URL地址解析到 [ 模块/控制器/操作 ],其实也就是执行某个控制器类的某个操作方法 不是你怎么理解,而是他怎么说的 毕竟你是在用人家的东西,吃人家的饭受人家的管
永动bug制造机 2016-04-22
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
class [ app\index\controller\Home ] not exists 是说 Home 没找到! 而你确实没有定义 Home 类,只有 Home 方法 tp5 采用了全新的写法,不兼容低版本。控制器的写法与 laravel 类似,只是后者使用的是闭包 这是为了适应 API 所做的变化,一事一议 使用时需注意
按照你说的 改了下 可以运行了 好像跟c#的写法有点差距 http://127.0.0.1:8096/public/index.php/index/home 我的理解 index 是控制器 home是视图 也就是每个视图都要一个单独的类 请教下 我的理解对么
xuzuning 2016-04-22
  • 打赏
  • 举报
回复
class [ app\index\controller\Home ] not exists 是说 Home 没找到! 而你确实没有定义 Home 类,只有 Home 方法 tp5 采用了全新的写法,不兼容低版本。控制器的写法与 laravel 类似,只是后者使用的是闭包 这是为了适应 API 所做的变化,一事一议 使用时需注意
永动bug制造机 2016-04-22
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
http://www.kancloud.cn/thinkphp/thinkphp5-guide/90155 的描述,你需要

<?php
namespace app\index\controller;

class Index
{
    public function index()
    {
        return '省略。。。';
    }
    
    public function home()
    {
    	return 'home page';
    }
}
应该不是这个问题 我尝试加了extends Controller 也是同样错误 index是原来框架提供的 http://127.0.0.1:8096/public/index.php/index/index 可以正常访问 home()是我添加的 访问http://127.0.0.1:8096/public/index.php/index/home 就报错

Exception in Loader.php line 349
class [ app\index\controller\Home ] not exists

        $class = self::parseClass($module, $layer, $name);

        if (class_exists($class)) {
            $action                    = new $class;
            $_instance[$name . $layer] = $action;
            return $action;
        } elseif ($empty && class_exists($emptyClass = self::parseClass($module, $layer, $empty))) {
            return new $emptyClass;
        } else {
//这里抛出异常
            throw new Exception('class [ ' . $class . ' ] not exists', 10001);
        }
    }
xuzuning 2016-04-22
  • 打赏
  • 举报
回复
http://www.kancloud.cn/thinkphp/thinkphp5-guide/90155 的描述,你需要
class Login
{
    public function Login()
    {
        return "登录";
    }
}
class Login extends Controller
{
    public function Login()
    {
        return "登录";
    }
}
永动bug制造机 2016-04-22
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
URL解析和路由后,会把当前的URL地址解析到 [ 模块/控制器/操作 ],其实也就是执行某个控制器类的某个操作方法 不是你怎么理解,而是他怎么说的 毕竟你是在用人家的东西,吃人家的饭受人家的管
多谢了 对php 这类东西不是很熟 我在研究研究

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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