Slimフレームワーク学習、初日

4680 ワード

index.php分析
indexファイルは初めて認識し、各文の背後にある意味を分析します.
    require 'vendor/autoload.php'; //       ,    spl_register()
    $app = new Slim\App(); //   App  
    $app->get('/hello/{name}',function($request,$response,$args){
        return $response->write("Hello," . $args['name']);
    }); //    get  
    $app->run();

詳細な分析
require ‘vendor/autoload.php’;
主な利用はspl_autoload_registerは、必要なクラスを自動的にロードします.この方法は,後で特集して述べる
$app = new Slim\App();
主にAppクラスがインスタンス化されており、コードは以下の通りです.
    public function __construct($container = [])
    {
        if (is_array($container)) {
            $container = new Container($container);
        }
        if (!$container instanceof ContainerInterface) {
            throw new InvalidArgumentException('Expected a ContainerInterface');
        }
        $this->container = $container;
    }
  • 上記から分かるように、Appクラスをインスタンス化する際には、主にContainerオブジェクトがインスタンス化され、属性としてAppオブジェクトに
  • が保存されている.
  • なお、この場合のAppオブジェクトはpsr 7モードで実現される(値オブジェクト)$app->get()解析である
    ルーティングを設定し、コンテナに登録するには、次の2つのコードが含まれます.
  •  public function get($pattern, $callable)
     {
        return $this->map(['GET'], $pattern, $callable);
     }
    public function map(array $methods, $pattern, $callable)
    {
            if ($callable instanceof Closure) {
                $callable = $callable->bindTo($this->container);  //Closure::bindTo —         ,     $this       。
            }
    
            $route = $this->container->get('router')->map($methods, $pattern, $callable);
            if (is_callable([$route, 'setContainer'])) {
                $route->setContainer($this->container);
            }
    
            if (is_callable([$route, 'setOutputBuffering'])) {
                $route->setOutputBuffering($this->container->get('settings')['outputBuffering']);
            }
    
            return $route;
        }

    ####注意点:
     if ($callable instanceof Closure) {
                $callable = $callable->bindTo($this->container);  //Closure::bindTo —         ,     $this       。
            }

    今日は先にここに来て、明日は続きます.