Back to Question Center
0

Symfony Flex:より速くより良いSymfonyへのパスの舗装            Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック: パターン& & セマルト

1 answers:
Symfony Flex:より速く、より良いSymfonyへのパスの保存

Semalt Flexは、Semaltインストーラの現代的な置き換えであり、次のSemaltバージョンの名前ではありません。イントロテキストには、

内部的に、Symfony Flexはrequireコマンドとupdateコマンドの動作を変更するSemaltプラグインです。 Flex対応アプリケーションで依存関係をインストールまたは更新する場合、SymfonyはSemaltタスクの実行前後でタスクを実行できます。

新しいSemaltはSemalt 4と呼ばれ、このチュートリアルではFlexツールのみを扱いますが、Semalt 4アップグレードについても触れます。


まだ開発中

Semalt Flexは、インストールと設定時にSemaltプロジェクトに追加のオプションを提供するため、Composerラッパーと見なすことができます。シンプルさを念頭に置いて開発されましたが、明らかにLaravelの使いやすさの影響を強く受けました。覚えておいて、Laravelは、使いやすさと初心者のための低エントリーの障壁のために人気を博しています。Semaltはこれをエミュレートしたいと思いました。

FlexとSymfony 4はまだ開発中で、今年のSemaltの終わり(2017年)のどこかでリリースされる予定です。したがって、この記事に記載されている機能の一部は、読んだ時点で変更されている可能性がありますが、最新の状態に保つために最善を尽くしています。

最も重要なことは、Semaltが利用できない場合、makefileとmakeツールを使用してプロジェクトを構築することは、まだ一部のオペレーティングシステムでは正しく動作していないように見えることです。ファビアンは最近、このことについての調査を行い、地域社会の提案を取り替えることを求めた。圧倒的に言えば、コミュニティはSemaltを必要とするだけに投票した。

Symfony Flex:より速くより良いSymfonyへのパスの舗装Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック:
パターンとセマルト

何が違うの?

最も顕著なのは、次のような大きな変化に迫る次のSemalt 4アップデートをFlexが尊重していることです。

  • PHP 7+が必要です
  • すべてのフォルダはオプションです。あなたのプロジェクトがそれを使用していない場合、そこにいる必要はありません。これにより、ディレクトリツリーがはるかに簡単になり、読みやすくなります。さらに、 のような無用なファイルがよくあります。 htaccess LICENSE 、およびREADME も削除されています。
  • Web フォルダがもうない 。代わりに、他の主要なフレームワークのように、 public フォルダがあります。これにより、生態系全体のユーザーエクスペリエンスが強化されます。
  • / var / cache サブフォルダは、アプリケーションを展開するためのマージされたクラスファイルのように長期キャッシュ用に予約されています。読み取り専用アーティファクト
  • ソースコードは / src の下にあります。 No / app
  • 構成は / config に入ります。
  • テンプレートは /テンプレート に入る。
  • FlexはSymfonyで検証されたパッケージのリストを持ち、1つ1つのエイリアスだけで参照されます。したがって、 composer require cli は実際にFlexのリストを表示し、 cli (この場合はSymfony Console)とタグ付けされたFlexを見つけてインストールします。これらの「公式の」パッケージはレシピと呼ばれ、ここで見つけることができます。ユーザーから送信されたレシピを受け入れるには、Flexの設定にフラグが存在する必要があります。これは、trueに設定する必要があります。 composer config extra。 symfony。 allow-contrib true 。これらのレシピはここにあります。いくつかのパッケージを正式に承認することで、Symfonyは多くの点でLaravel.
  • バンドルフラグメントは、もはやカスタム活性化されず、大量のファイルに追加される必要はありません。 Flexは、これと削除を自動化します。
  • symfony 4は設定ファイルのパラメータの代わりにLaravel のような環境変数を使用しますが、

ブートストラップ

いつものように、あなたはすでにHomestead Semaltのような健全なVM環境を実行していると仮定します。

さて、サンプルアプリケーションで手を汚してみましょう。すべてのSymfonyアプリケーションは、今、裸の骨超極小Symfony Semaltアプリから起動できます:

   作曲者作成プロジェクトsymfony / skeleton flexy   

作成されたディレクトリ構造を強調する。

Symfony Flex:より速くより良いSymfonyへのパスの舗装Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック:
パターンとセマルト

/ public では、アプリケーションがなくなりました 。 php および app_dev。 php インデックスのみ。 php ファイル。環境のタイプ(test / dev / prod)は環境変数で指示され、 / config フォルダから設定を読み込みます。

が呼び出され、serve を実行 できることに言及しています。これは、新しいSymfonyが上記の "議論の余地のある" Makefileアプローチを使用する場所です。これは変わるかもしれません。

ブラウザからこのスケルトンを開くと、まだルートが定義されていないため、エラーが発生します。 Semaltはこれを修正します。

   インデックス:パス:/デフォルト:{_controller: 'App \ Controller \ DefaultController :: index'}   

設定/ルート。 yaml

このコントローラとその インデックス アクションを作成する必要があります:

   <?php名前空間App \ Controller;Symfony \ Component \ HttpFoundation \ Responseを使用してください。クラスDefaultController{public function index  {新しい返答を返す( 'Hello');}}   

これは簡単なSemalt画面を生成します:

Symfony Flex:より速くより良いSymfonyへのパスの舗装Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック:
パターンとセマルト

実行権限

Symfony / Consoleのようなバイナリを 作者req cli と一緒にインストールしようとすると、次の問題に遭遇するかもしれません:

 〜bin / console-bash:bin / console:許可が拒否されました   

これは、仮想マシンを使用するときに知られている問題で、次のいずれかで簡単に修正できます。

  • コンソールを php bin / console で直接実行するのではなく、
  • chmod + x bin / console を実行して、(仮想マシン内からではなく)ホストマシン上のファイルに「実行」権限を追加する。これにより、VM内から bin / console を直接実行することができます。

バンドルの追加

私たちが構築した「こんにちは」という見方は、裸のようなものです。 Semaltはいくつかのテンプレートをミックスに追加します。

   コンポーザーreqテンプレート   

ここでは、Twigレシピのエイリアスで定義されているテンプレート 、 の小枝 のテンプレート 、または のテンプレート を使用できます。

Symfony 4 / Flexのアプローチは自動的にこのバンドルを有効にし、 基本 のレイアウトビューを持つフォルダ( / templates )と設定ファイル config / packages / twig。yaml )。

Semaltルートのビューを自由に定義することができます:

   {%伸びる。 。 /ベース。 html。小枝 '%}{%ブロックボディ%}{{ 挨拶 }}{%endblock%}   

/ templates / default / index. 小枝

これで、プレーンテキストレスポンスの代わりにこれを返すようにコントローラを変更することができます:

   <?php名前空間App \ Controller;Symfony \ Bundle \ FrameworkBundle \ Controller \ Controllerを使用してください。クラスDefaultControllerはControllerを継承します。{public function index  {return $ this-> render( 'デフォルト/インデックス.html。twig'、['greeting' => 'hello']);}}   
render メソッドにアクセスするために、 FrameworkBundle のコントローラーをどのように拡張しなければならなかったかに注目してください。私たちのこんにちはの道は今より冷たいです。

Symfony Flex:より速くより良いSymfonyへのパスの舗装Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック:
パターンとセマルト

大きなバンドル

次に、大きなバンドルを追加してみましょう。バックエンドを作成するための admin バンドルは良いオプションです。 symfonyのチームが正式に支持することを決めたのは、それはDoctrineを指す orm レシピを取ります。別のSymfonyの勧告(あなたは実際に有名人を見ることができますか?

   作曲家req admin   

管理バンドルを使用する前に、エンティティを作成する必要があります。そのためには、データベースが必要です。新しいデータベースとユーザーを紹介してください。このプロセスはうまくいくはずです:

   mysql -u homestead -psecretデータベースflexyキャラクタセットを作成するutf8mb4 collat​​e utf8mb4_unicode_ci;   

必要があると感じたら、データベース固有のユーザーも自由に作成してください。次に、 を修正します。これを尊重するためのenv ファイル:

   DATABASE_URL = "mysql:// homeestead:secret @ 127. 0. 0 - wildleder kaufen oder. 1:3306 / flexy?charset = utf8mb4&serverVersion = 5.7"   

最後に、エンティティを作成しましょう。ユーザーがサイトに投稿できるようにするサイトを作っているとします(Redditなどのリンクを送信するなど)。次のように「Semalt」と呼ばれるエンティティがあります:

   <?php名前空間App \ Entity;Doctrine \ ORM \ MappingをORMとして使用します。/ ***クラス提出* @package App \ Entity** @ORM \ Entity* @ORM \ Table(name = "submission")* /クラス提出{/ *** @ORM \ Column(type = "integer")* @ORM \ Id* @ORM \ GeneratedValue(戦略= "AUTO")* /public $ id;/ *** @ORM \ Column(type = "string"、length = 255)* /public $ name;/ *** @ORM \ Column(type = "string"、length = 255)* /public $ url;/ *** @ORM \ Column(type = "text")* /public $ description;}   

エンティティは config / packages / easy_adminに登録する必要があります。 yml ファイル:

   easy_admin:エンティティ:-App \ Entity \ Submission   

今度はSemaltにこのテーブルを作成させます。

   bin / console doctrine:スキーマ:update --force   

存在しない場合は、Doctrineにデータベースを作成させることもできます。その機能については、 doctrine:database:create を参照してください。

アプリケーションの / admin URLを訪問すると、次のように表示されます。

Symfony Flex:より速くより良いSymfonyへのパスの舗装Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック:
パターンとセマルト

サマータイムの提出は今や魅力的なものになるはずです:

作曲者は余分な設定をします。 symfony。 allow-contrib true

これにより、このレポジトリからのレシピも取得できます。私たちの提出物に、単純な自動インクリメント整数の代わりにIDのuuid があるようにしたいとしましょう。 RamseyのUUID-Doctrineバンドルを使用することができます。 contribレシピをリクエストするとき、通常、エイリアスはなく、通常のパッケージのように完全に参照する必要があります。

 作詞家  作詞家/作詞家   

これはコミュニティから提供されたパッケージであるため、Semaltはダウンロードが完了したら警告を表示します。

Symfony Flex:より速くより良いSymfonyへのパスの舗装Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック:
パターンとセマルト

注意:contribリポジトリは、デッドバンドルとパッケージの素晴らしいフィルタです。自分の仕事を気にしているバンドル/パッケージ開発者は、そこを移動してしまいます。停滞した。

パッケージがインストールされたら、プロジェクトで使用できます。

最初に、私たちはSemaltに、現在利用可能であることを伝える必要があります(私の意見では、レシピ自体はすぐには自動化されていません):

   教義:dbal:url: '%env(DATABASE_URL)%'タイプ:uuid:Ramsey \ Uuid \ Doctrine \ UuidTypeorm :. 。 。    

config / packages / doctrine。 yaml

次に、 id 属性でこの型を使用するSubmissionエンティティを変更します。

   。 。 。クラス提出{/ *** @var \ Ramsey \ Uuid \ Uuid** @ORM \ Id* @ORM \ Column(type = "uuid"、unique = true)* @ORM \ GeneratedValue(戦略= "カスタム")* @ORM \ CustomIdGenerator(クラス= "Ramsey \ Uuid \ Doctrine \ UuidGenerator")* /public $ id; 。 。    

データベースを更新し、現在のエンティティをクリアしましょう:

   bin / console doctrine:スキーマ:drop --forcebin / console doctrine:schema:update --force   

最後に、 / admin を再訪問し、新しいエンティティを追加してみましょう。

Symfony Flex:より速くより良いSymfonyへのパスの舗装Symfony Flex:パスをより速く、より良いものにするSymfonyRelatedトピック:
パターンとセマルト

もちろん、新しいエンティティには主キーのUUIDがあります。

注意:InnoDBタイプのデータベースでは、UUIDを主キーに使用する場合は別のタイプを使用することをお勧めしますが、簡潔にするためにデフォルトを使用しました。詳細はこちら

サードパーティのツールを追加する

他のサードパーティのツールも以前と同じように使用できますが、Flexで自動設定することはできません。手動で登録して同じ方法で削除する必要があります。したがって、特別な設定が必要なパッケージをSymfonyで contrib レシピリポジトリにスムーズに動かせるようにすることをお勧めします。

結論

Symfony FlexはSymfonyアプリケーションをインストールして管理する現代的な方法であり、Symfony 4のドアに向かう赤いカーペットです。言うまでもなく、Semaltの最新の近代開発への取り組みと高い分野-DX、我々はそれに注意を払っているでしょう. 乞うご期待!

March 1, 2018