OSI基本参照モデルそろそろ覚えたい

初めてOSI基本参照モデルを知ったのは、ITパスポートの勉強をしているときかな。
私の中でネットワーク系の分野への苦手意識が高いのもあり、
私の脳になかなか定着しないOSI基本参照モデルさん。
ということでOSI基本参照モデルを覚える会。

OSI基本参照モデル

ネットワークに接続する装置っていっぱいあるらしい。
いろんな装置をいろんな人たちが作って、ばらばらだし、
それを接続する方法もまちまち・・・

結局利用者は変換アダプターを用意しなければならなかったりする。
だから、統一しておこう。

異なる種類のものでも、問題なく通信が行えるように
ルールを決めておきましょうっていうのがOSI基本参照モデルさん。

コンピュータ通信のプロトコルは、
ISO (国際標準化機構) ⇒アイソと読む
という団体が推進している
OSI(開放型システム間相互接続) ⇒オーエスアイと読む
で設計の指針が取り決められている。

このOSIOSI基本参照モデルを作成されている。
国際基準としてとても重要なもの。

OSI基本参照モデル
層の名前 機能
7 アプリケーション層 アプリケーションごとのサービスを提供 電子メール
WWW
6 プレゼンテーション層 データを通信に適した形に変換 文字コード
圧縮方式
5 セッション層 コネクションの確立・維持・切断
同期・非同期モードの管理
4 トランスポート層 データを通信相手に確実に届ける
フロー制御、誤り検出
TCP
UDP
3 ネットワーク層 アドレスの管理と経路の選択 IP
ルーティング
2 データリンク層 物理的な通信経路の確立
誤り検出や再送制御
イーサネット
MACアドレス
スイッチング
1 物理層 コネクタなどの形状と電気特性の変換
電気、光、電波、伝送路など
UTPケーブル
光ファイバ
メディアコンバータ
リピータ

1~4層:通信機能 下位層と呼ぶ
5~7層:アプリケーション層 上位層と呼ぶ
層:レイヤーともいう

各階層のデータ転送でデータ単位(PDU)の呼び名が変わる

第4層トランスポート層 : セグメント
第3層ネットワーク層  : パケット
第2層データリンク層  : フレーム

あくまでもOSI基本参照モデルはモデルで実際にはTCP/IPが使われている。

TCP/IP

OSI基本参照モデルを簡略化したプロトコル

OSI基本参照モデル TCP/IP
第7層アプリケーション層
第6層プレゼンテーション層
第5層セッション層
アプリケーション層
第4層トランスポート層 トランスポート層(TCP層)
第3層ネットワーク層 インターネット層(IP層)
第2層データリンク層
第1層物理層
ネットワークインターフェース層


今日から毎日寝る前に「ア・プ・セ・ト・ネ・デ・ブ」と唱えてから寝るようにしたいと思います。

Symfony Expr条件メソッド

リポジトリに独自メソッドを追加し、その際にはExprを使用して条件指定すべきことを学びました。 その際Exprの条件用メソッドがいくつかあったのでここにまとめておきます。

Expr条件指定メソッド

条件 書き方
フィールド= 値 《Expr》->eq( カラム名, 値 )
フィールド <> 値 《Expr》->neq( カラム名, 値 )
フィールド < 値 《Expr》->lt( カラム名, 値 )
フィールド <= 値 《Expr》->lte( カラム名, 値 )
フィールド > 値 《Expr》->gt( カラム名, 値 )
フィールド >= 値 《Expr》->gte( カラム名, 値 )
フィールド LIKE 値 《Expr》->like( カラム名, 値 )
フィールド NOT LIKE 値 《Expr》->notLike( カラム名, 値 )
フィールド IN 配列 《Expr》->in( カラム名, 配列 )
フィールド NOT IN 配列 《Expr》->notIn( カラム名, 配列 )
フィールド IS NULL 《Expr》->isNull( カラム名)
フィールド IS NOT NULL 《Expr》->isNotNull( カラム名)

Exprを使わないで書く時

<? php
class PersonRepository {
    public function findByName($value) {
        $arr = explode (',', $value); //第1引数の文字で第2引数の文字列を配列に分割する関数
        return $this->createQueryBuilder('p') // Personテーブルをpと指定
            ->where("p.name in (?1, ?2)")
            ->setParameters(array(1 => $arr[0], 2 => $arr[1]))
            ->getQuery() // Queryクラスのインスタンスを取得
            ->getResult(); // 実行(エンティティのリストを返す)
    }
}
?>

Exprを使って書く時

<? php
class PersonRepository {
    public function findByName($value) {
        $arr = explode(',', $value);
        $builder = $this->createQueryBuilder('p'); // buidlerを変数に代入
        return $builder // builderのwhereメソッドを呼び出す形にする
            ->where($builder->expr()->in('p.name', $arr))
            ->getQuery()
            ->getResult();
    }
}
?>

in式の時はパラメータをいちいちセットする手間が減る!

x <> 1 このような不等号は初めて知りました。
x < 1 かつ x > 1 という意味、つまり x != 1と覚えておいて良さそう。

Twigテンプレートの基本

かなーりざっくりまとめ

コメントアウト

{# コメント内容 #}

{#
 コメント
 内容
#}


変数の宣言

{% set 変数 = 値 %}


変数のスコープ設定

変数の重複を防ぐ

{% with %}{% endwith %}


if文

{% if 条件 %}
 処理
{% elseif 条件 %}
 処理
{% else %}
 処理
{% endif %}


for文

PHPのforeachに相当する

{% for 変数 in 配列 %}
 繰り返す処理
{% end for %}


マクロ

HTMLを再利用する

{% macro マクロ宣言 %}
{% endmacro %}

マクロのインポート

{% import マクロファイル as エイリアス %}

特定のマクロだけのインポートの場合は

{$ from マクロファイル import マクロ as エイリアス %}

同テンプレートがいる内に記載したマクロを使用したい場合は

{% import _self as エイリアス %}


テンプレートのインクルード

{% include テンプレートファイル %}

テンプレートに値を渡すとき

{% include テンプレートファイル with [値の配列] %}


オートエスケープ

オートエスケープに関する設定を管理する

{% autoescape 値 %}
{% endescape %}

値には'html' 'javascript' 'css'などと指定する。 オートエスケープ無効にしたいときは

{% autoescape false %}

フィルター

{ 値 | フィルター }
フィルター名 フィルターの効果
raw エスケープ処理せず生のデータを出力
escape エスケープ処理を行う
upper すべて大文字にする
lower すべて小文字にする
capitalize 最初の文字を大文字、それ以外を小文字にする
abs 絶対値出力
date(形式) 日付の値を指定の形式で出力
default(値) 指定の変数が未定義だった場合のデフォルト値を設定
first/last 配列の値で最初の項目または最後の項目を出力する
json_encode 指定の値をJSON形式テキストとして出力
length 配列やテキストで要素数を返す
merge(配列) 配列に対して引数指定した配列をマージする
nl2br 改行部分に<br>を追加する
number_format(形式) 数値をフォーマットする
reverse テキストや配列を逆順にする
round 数値を丸める
sort 配列をソート
split(区切り文字) テキストを引数の区切り文字で分割した配列を返す
trim テキスト前後の空白文字を削除
url_encode テキストをURLエンコードする


{% %}で値や変数を利用する際にも使える

{$ set arr = [4,3,1,5,2] | sort %}

Symfony4 Twigテンプレートにレンダリング

コントローラからテンプレートへ

renderメソッドを使用してtemplates/hello/index.html.twigにレンダリングする。

$this => render(テンプレート名, [テンプレートに渡す値の配列]);

ex)

public function index(Request $request)
{
   return $this->render('hello/index.html.twig',[
                  'name' => 'Kii',
                  'age' => 26
          ]);
}

テンプレート側では {{name}}{{age}}と記述することで値が表示される。
簡単!ちなみにTwigの読みはツイッグらしい

テンプレートからコントローラへ(パスパラメータ)

ルートアノテーションにパスパラメータ設定

/**
* @Route("/sample/{msg}", name="sample")
*/

/sample/hogehogeでアクセスすれば、$msg = 'hogehoge'みたいに値を受け取れる。

フォームに入力した値をコントローラで受け取る

テンプレートのフォームインプットname属性で指定した名前で取り出せる。

テンプレート側

<input type="text" name="hoge" />

コントローラ側で取り出す際

$hoge = $reqest->request->get('hoge');

リクエストのHTTPメソッドをチェックする

if ($request->getMethod() == 'POST') {
   // POSTの時の処理
} else {
  // GETの時の処理
}

フォームのデータをインスタンスとして扱う

FormBuilderの作成

$this->createFormBuilder();

フィールドの追加

<<FormBuilder>> -> add( フィールドの名前, フィールドの種類, [属性の連想配列]);

addメソッドはチェーンして呼び出せるので、必要なだけ追加する。
フィールドの種類は、いろいろある。
例えば通常のテキストフィールド<input type="text />をフォームに入れたい場合は
下記のように記述する。(第3引数は省略化)

<<FormBuider>>->add('hoge', TextType::class)

フィールドの種類一覧が見れる
Form Types Reference (Symfony Docs)

一通りフィールドをaddし終わったら、Formを取得する。 FormInterfaceオブジェクトを返す

<<FormBuilder>> ->getForm();

ビューを作る

<<FormInterface>> ->createView();

サンプル

<?php
class Person () {
  protected $name;
  protected $age;
  
  public function setName($name) {
    $this->name = $name;
    return $this; // ここで自身を返すことでメソッドチェーン出来る
  }

  // ゲッター&セッター省略
}

class SampleController extends AbstractController {
  $person = new Person();
  $person->setName('kii')
    ->setAge(25);

  $form = $this->createFormBuilder($person)
    ->add('name', TextType::class)
    ->add('age', IntegerType::class)
    ->add('save', SubmitType::class)
    ->getForm();

  $form->handleRequest($req); //送信されたフォーム情報をハンドリング
  $reqPerson = $form->getData(); // フォームのPersonインスタンスを取得
  $reqName = $reqPerson->getName();
  $reqAge = $reqPerson->getAge();
  ...
}
?>

ひとこと

FormBuilderを利用してTwigテンプレートとレンダリングするフォームが作れるということが分かりました!

ブログをはじめてみる

しがない女性プログラマです。
日々の備忘録として、ブログを始めることにします!

ブログを開設するのは初めてではありませんが、いつもなかなか続きません。。

まずは続けることが大事!
ダイエットと同じですね。


ブログ名は、プログラムと、プラム(すもも)を混ぜ合わせてみました。
なんとなく、可愛いかなって思って(笑)

自分好みにいろいろカスタマイズしたいなぁ
よろしくお願いします!