【问题标题】:Creating a PHP Web app from scratch using Slim as Architecture使用 Slim 作为架构从头开始创建 PHP Web 应用程序
【发布时间】:2016-09-21 09:56:43
【问题描述】:

这是我使用核心 PHP 开发 Web 应用程序并遵循最佳实践而不使用框架的长期追求。通过以更好的方式构建我的项目,我取得了很多成就。然而......对于大型应用程序来说,获得一个干净的 URL 通常是一个问题。

到目前为止...我只使用 Slim 框架在我的 Web 应用程序之外创建 RESTFUL 服务。

我正在使用 Slim 框架为 PHP 项目创建 API。现在,我安装了 Slim 并且运行良好。我让我的路线与数据库交谈并做他们应该做的事情,一般来说。我的问题与模块化代码有关。目前,我所有的路由都定义在我的根目录下的 index.php 文件中。我非常想将它们分开,比如放到 /controllers 文件夹中。

因为我喜欢 Slim 制作非常好的 URL 的方式...我想知道是否可以使用 Slim 作为我的应用程序架构...并让我的所有页面或 API 都可以通过 Slim index.php 访问。

【问题讨论】:

  • 您可以查看其中一个 Slim 骷髅以获取灵感。

标签: php url-rewriting url-routing slim


【解决方案1】:

是的,这很容易,这是我在最近的一个项目中采取的步骤。

首先假设你有一个 HomeActionController

class HomeActionController {

    //The below line I have moved into an abstract Controller class
    public $view = null;

    //This is using Slim Views PhpRenderer
    //This allows for a controller to render views can be whatever you need
    //I did not like the idea of passing the whole DC it seemed overkill
    //The below method I have moved into an abstract Controller class
    public function __construct(\Slim\Views\PhpRenderer $view = null){        
        if($view != null){
            $this->view = $view;
        }
    }  

    //View could be any action method you want to call it.
    public function view(Request $request, Response $response, array $args){
         $data['user'] = "John Doe";
         return $this->view->render($response, 'templates/home.php', $data);
    }
}

现在您需要能够从路由中调用此控制器的实例,因此您需要将您拥有的控制器添加到 DC

无论您在何处创建 slim 实例,都需要获取 DC 并添加控制器实例:

$app = new \Slim\App($config['slim']);

// Get Dependency Container for Slim
$container = $app->getContainer();

$container['HomeActionController'] = new Controller\HomeActionController($container['view']); //Notice passing the view

作为说明,上述实例化可能是一个闭包,但我当时没有看到或制作它们。此外,还有一些我尚未探索过的延迟加载方法,请参阅here 了解更多信息。

现在您需要做的最后一件事是能够在路线上调用这些,这并不是一个巨大的挑战。

$app->get('/home', 'HomeActionController:view');

当然,您不能对参数进行操作,但我没有遇到问题,只是在请求中传递它们,然后从那里获取它们。

【讨论】:

  • 您使用的是哪个 Slim 版本。
  • 我在最新的 3 件事上。
【解决方案2】:

如果您想创建一个没有框架的应用程序,那么我建议您查看这个小型 github 存储库: https://github.com/PatrickLouys/no-framework-tutorial

它会根据您的路由设置所有内容,并且会让所有内容都通过公共文件夹中的 index.php 进行,就像您询问的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多