将Smarty PhP应用程序转换为AngularJS

将Smarty PhP应用程序转换为AngularJS,php,angularjs,.htaccess,model-view-controller,Php,Angularjs,.htaccess,Model View Controller,我有一个使用Smarty的PHP应用程序。它不使用任何标准MVC框架,但实现了以下相同目标: 每次导致页面转换的单击都是通过调用结构化URL(类似于REST调用)来实现的,该URL由Apache重写规则(in.htaccess)解释为附加到index.php文件的特定查询参数 php然后确定要加载的页面或子页面,执行任何控制器逻辑,然后组装显示信息,加载smarty变量,然后显示 我在某个地方读到,混合使用前端和后端MVC框架是不可取的。然而,我需要在尽可能短的时间内转换应用程序 典型的组合

我有一个使用Smarty的PHP应用程序。它不使用任何标准MVC框架,但实现了以下相同目标:

  • 每次导致页面转换的单击都是通过调用结构化URL(类似于REST调用)来实现的,该URL由Apache重写规则(in.htaccess)解释为附加到index.php文件的特定查询参数

  • php然后确定要加载的页面或子页面,执行任何控制器逻辑,然后组装显示信息,加载smarty变量,然后显示

我在某个地方读到,混合使用前端和后端MVC框架是不可取的。然而,我需要在尽可能短的时间内转换应用程序

典型的组合是让angular调用PHP REST后端。然而,我宁愿将所有深层业务逻辑保留在后端(不仅仅是CRUD操作),而是让PHP将要显示的数据发送回我的数据库

我对Angular很陌生:有没有什么东西使得这在技术上不可能或次优

典型的组合是让angular调用PHP REST后端

是的,很典型。但并非绝对必要。您的Web服务可以按照您想要的方式进行结构化

然而,我宁愿将所有深层业务逻辑保留在后端(不仅仅是CRUD操作),而是让PHP将要显示的数据发送回我的数据库

我可能误解了你,但是,将你的业务逻辑保留在后端是应该的


php然后确定要加载的页面或子页面,执行任何控制器逻辑,然后组装显示信息,加载smarty变量,然后显示

这里的问题是“控制器逻辑”。据我所知,您正在尝试用客户端模板引擎替换服务器端模板引擎。那很好。但是AngularJS不是一个模板引擎,在您的情况下,有一些关键点可能会使它成为一个错误的选择:

  • Angular是一个单页网站/应用程序。这意味着它期望页面流和视图逻辑,例如,由客户端控制。通过将“控制器”逻辑保留在后端,您将Angular变成一个效率极低且沉重的模板引擎

  • 它希望后端提供(结构化)数据,而不是“完整”视图。当然,没有什么可以阻止您请求PHP文档。但这有点违背了使用角度传感器的目的

  • 由于其无状态特性,它与REST配合得很好。这 这可能有点困难,因为它与通常的PHP设置不同。最大的例子是登录和PHP会话

    通常,在大多数PHP设置中,用户通过登录表单进行身份验证,然后服务器用cookie响应,cookie通常包含PHPSESSID。在传递cookie时,用户保持登录状态,并显示相应的UI/视图/数据。要使此逻辑适应AngularJS单页应用程序,需要做一些工作


  • 我对Angular很陌生:有没有什么东西使得这在技术上不可能或次优

    简言之。。。不可能,不可能。也许是次优


    典型的组合是让angular调用PHP REST后端

    是的,很典型。但并非绝对必要。您的Web服务可以按照您想要的方式进行结构化

    然而,我宁愿将所有深层业务逻辑保留在后端(不仅仅是CRUD操作),而是让PHP将要显示的数据发送回我的数据库

    我可能误解了你,但是,将你的业务逻辑保留在后端是应该的


    php然后确定要加载的页面或子页面,执行任何控制器逻辑,然后组装显示信息,加载smarty变量,然后显示

    这里的问题是“控制器逻辑”。据我所知,您正在尝试用客户端模板引擎替换服务器端模板引擎。那很好。但是AngularJS不是一个模板引擎,在您的情况下,有一些关键点可能会使它成为一个错误的选择:

  • Angular是一个单页网站/应用程序。这意味着它期望页面流和视图逻辑,例如,由客户端控制。通过将“控制器”逻辑保留在后端,您将Angular变成一个效率极低且沉重的模板引擎

  • 它希望后端提供(结构化)数据,而不是“完整”视图。当然,没有什么可以阻止您请求PHP文档。但这有点违背了使用角度传感器的目的

  • 由于其无状态特性,它与REST配合得很好。这 这可能有点困难,因为它与通常的PHP设置不同。最大的例子是登录和PHP会话

    通常,在大多数PHP设置中,用户通过登录表单进行身份验证,然后服务器用cookie响应,cookie通常包含PHPSESSID。在传递cookie时,用户保持登录状态,并显示相应的UI/视图/数据。要使此逻辑适应AngularJS单页应用程序,需要做一些工作


  • 我对Angular很陌生:有没有什么东西使得这在技术上不可能或次优

    简言之。。。不可能,不可能。也许是次优



    你的观点#2是支点。我看的是每一个最终调用Smarty的PHP,将所有要显示的组装数据发送到AngularJS,以便通过作用域访问(即,已经执行了业务逻辑)。因此,从您的解释来看,这是完全正确的。Thx,只是想在做出努力之前确认一下。@user1729972没问题。=)话虽如此,我可能会有一些纯AngularJS页面(应用程序的一部分),在纯PHP/Smarty和Angular(与同一后端对话)之间来回切换。旁白检查后面是否存在有效的PHP会话-