如何在没有任何类型框架的情况下在php项目中与视图和控制器通信

如何在没有任何类型框架的情况下在php项目中与视图和控制器通信,php,jquery,url-routing,Php,Jquery,Url Routing,背景/想法 我正在从头开始创建一个web应用程序;没有任何类型的php框架。 我以这种方式创建web应用程序;因为我想学习php;我想 使用php框架不会使我成为一名优秀的php开发人员 到目前为止我做了什么? 我创建一个项目结构: 项目 css 剧本 模型 控制器 意见 资源 我创建了一个视图,如: <html> <head> <!-- here i call my jquery.js --> <script> ... function

背景/想法 我正在从头开始创建一个web应用程序;没有任何类型的php框架。 我以这种方式创建web应用程序;因为我想学习php;我想 使用php框架不会使我成为一名优秀的php开发人员

到目前为止我做了什么? 我创建一个项目结构:

项目 css 剧本 模型 控制器 意见 资源 我创建了一个视图,如:

<html>

<head>

<!-- here i call my jquery.js -->

<script>

...

function action()
(
...
    $.ajax(url: "/Controllers/HomeController.php", type:"POST",DataType:"JSON",Parameter:{var1:$("#var1").val(),method:"singup"})
    {...}
...
)

...

</script>

</head>

<body>

<input id="var1" name="var1" type="text">
<input id"mybutton" name="mybutton" type="button" onclick="action();">

</body>

</html>
在my HomeController.php中

<?php

if(if(is_set($POST('method'))))
{
   if(function_exist($POST('method')))
   {   
      switch($POST('method'))
      {
          case "singup":
                $var1 = $POST('var1')
                singup($var1);
                break;
            ...
          default: break;
      }
   }
}

function singup($var1)
{
  $array = {"var1" => $var1};
  json_decode($array,1);
}

?>
问题

我不是很确定这个代码的安全性。我想知道: 建议使用什么方法在视图和控制器之间进行调用而不使用out
使用任何类型的php框架?

嗯,我不确定我是否正确阅读了你的问题,但是

在您的控制器中,您可以执行所有PHP操作,然后当您想要加载视图时,可以使用

include命令加载html.php页面。通过这种方式,您的PHP变量将公开给您的视图

但是,如果你学习了,打开一个现有的框架,看看他们采取了什么方法也无妨

此外,在我的框架中,我创建了一个名为assets的文件夹,其中包括所有css、img和js目录

对于任何框架,我都将与您分享我用来获取URI并提取控制器、操作和参数的代码片段

self::$_params = explode('/', rawurldecode(trim(parse_url(getenv('REQUEST_URI'), PHP_URL_PATH), '/')));

            $scope = array_shift(self::$_params);

$pre = null;
            $pre = strlen(self::$_controller) > 1 && is_numeric(self::$_controller[0]) ? 'n' : null;
            $pre = strlen(self::$_controller) > 1 && self::$_controller[0] == '-' ? 'd' : $pre;

            self::$_controller = $pre . preg_replace('/-/', '_', self::$_controller) . '_Controller';
            self::$_callAction = array_shift(self::$_params);

            if (empty(self::$_callAction) ||  self::$_callAction == '-')
            {
                self::$_callAction = 'indexAction';

            } else {

                $pre = strlen(self::$_callAction) > 1 && is_numeric(self::$_callAction[0]) ? 'n' : $pre;
                $pre = strlen(self::$_callAction) > 1 && self::$_callAction[0] == '_' ? 'u' : $pre;
                $pre = strlen(self::$_callAction) > 1 && self::$_callAction[0] == '-' ? 'd' : $pre;

                self::$_callAction = preg_replace('/-/', '_', self::$_callAction);
                self::$_callAction = $pre . self::$_callAction . 'Action';
            }

我自己喜欢在JS文件中包含所有这些事件和ajax调用,当您使用类似MVC的结构时,请尝试使用处理URI路由的逻辑,如

/controller/method/param1/param2
这样,您将拥有更好的代码结构,您的上述代码将引用类似的内容

/home/signup/param1......
为此,您必须首先获取URL,例如,将其划分为多个段

$controller = $segment[0] 
$method = $segment[1] 
$params = ... the rest of the segments

在这里,您可以检查控制器和方法是否存在,以及该方法是否具有给定数量的参数。试着看一看laravel框架的源代码,因为它们工作得很好,我打赌你可以从中挑出一些想法。

你的语法完全错了。也许一个像样的轻量级框架加上一本书,将是一个学习的好地方。谢谢!好吧,我找到了敲除器;我在代码中的疑问是php文件名和方法是否在javascript函数中可见。请参阅教程。。。在$.Ajax中。。。数据:{'student':个人,'action':'insert'}。。。操作方法的名称位于放置的位置。安全吗?这是一种好的做法吗?