폼 팩터 PHP, 템플릿 엔진으로 모델 확인

10192 단어 PHP
DB에서 데이터를 가져와 표시할 페이지가 있다고 가정합니다.
src/Page/Product.php
<?php
class Product
{
    public static function index($db)
    {
        // ...
    }

    public static function detail($db, $productId)
    {
        // ...
    }
}
만약 이러한 페이지 전용 학급(동작 클래스, 컨트롤러 클래스)이 있다면
src/Model/Product.php
<?php

namespace MyProject\Model;

use MyProject\Dto;

class Product
{
    private $db;
    public function __construct($db)
    {
        $this->db = $db;
    }

    /**
     * @return array<Dto\Product>
     */
    public function getList($limit, $offset): array
    {
        // $db->find($this->conditions(), $limit, $offset)
        return [];
    }

    public function get($productId): Dto\Product
    {
        // return $db->get($productId);
        return new Dto\Product();
    }
}
이런 모형을 호출하다
src\Dto\Product.php
<?php

namespace MyProject\Dto;

use DateTimeInterface;
use DateTimeImmutable;

class Product
{
    /** @var int */
    public $product_id;
    /** @var string */
    public $product_name;
    /** @var string */
    public $product_code;

    /** @var int */
    public $price;

    /** @var ?int */
    public $discount;

    /** @var DateTimeInterface */
    public $created_at;
    /** @var ?DateTimeInterface */
    public $updated_at;

    public $db_created_at;
    public $db_updated_at;

    public function __construct()
    {
        // ...
        $this->created_at = new DateTimeImmutable($this->db_created_at);
        if ($this->db_updated_at &&
            $this->db_updated_at != $this->db_created_at)
            $this->updated_at = new DateTimeImmutable($this->db_updated_at);
    }
}
이런 대상을 얻다.
이렇게 하면 페이지용 반.
src/Page/Product.php
<?php
namespace MyProject\Page;

use MyProject\Model;
use MyProject\template;

class Product
{
    public static function index($db)
    {
        $model = new Model\Product($db);
        $products = $model->getList(10, 0);

        template\product\index::exec($products);
    }

    public static function detail($db, $productId)
    {
        $model = new Model\Product($db);
        $product = $model->get($productId);

        return template\product\detail::exec($product);
    }
}
이렇게 된 느낌.$productDto\Product이므로 템플릿 클래스는
template\product\detail.php
<?php

namespace MyProject\template\product;

use MyProject\Dto;

class detail
{
    public static function exec(Dto\Product $product)
    {
        // ...
    }
}
이렇게 돼서
nullable에 오류가 발생했음을 알았습니다.

수정 후 기쁘고 축하할 만하다.
지금까지는 다양한 움직임이 생겨서 한 바퀴 돌면서 더 잘 쓰고 싶었다.phpstan를 사용하면 간단한if문도 검사할 수 있고 템플릿 엔진으로 @if하거나 {{ $product->updated_at->format('Ymd') }}쓰면 정적 해석이 작동하지 않습니다.
이전에는 쓰기도 의미가 없었고 문자, 숫자,null 등은 모두 템플릿 엔진에 삽입되었고 일부 키로 수치를 비교적 빨리 움직였다.
지금, 혹은 PHP7.4부터 위 코드에 Dto의 속성은 낚시형을 쓸 수 있어야 한다고 했는데, 그러면 원래의 PHP로 HTML 검사를 출력하면 행복할 수 있을까요?그런 생각.
탭 점프를 설정하면 템플릿의 변수부터 코드까지 왕복도 빨라서 쉬워요.(템플릿 엔진을 사용해도 키워드로 비행할 수 있지만 날고 싶은 곳에서 벗어난다.)
스타일리스트를 쓰는 사람들은 HTML과 변수가 결합된 곳에서 스타일 검사를 어떻게 하는가.
다만 IDE를 사용하지 않기 때문에 모릅니다. 예를 들어 Phptorm과 Blade 같은 경우 템플릿 엔진도 표준 검사 모델 같은 것을 받을 수 있습니다.

좋은 웹페이지 즐겨찾기