OSI基本参照モデルそろそろ覚えたい
初めてOSI基本参照モデルを知ったのは、ITパスポートの勉強をしているときかな。
私の中でネットワーク系の分野への苦手意識が高いのもあり、
私の脳になかなか定着しないOSI基本参照モデルさん。
ということでOSI基本参照モデルを覚える会。
OSI基本参照モデル
ネットワークに接続する装置っていっぱいあるらしい。
いろんな装置をいろんな人たちが作って、ばらばらだし、
それを接続する方法もまちまち・・・
結局利用者は変換アダプターを用意しなければならなかったりする。
だから、統一しておこう。
異なる種類のものでも、問題なく通信が行えるように
ルールを決めておきましょうっていうのがOSI基本参照モデルさん。
コンピュータ通信のプロトコルは、
ISO (国際標準化機構) ⇒アイソと読む
という団体が推進している
OSI(開放型システム間相互接続) ⇒オーエスアイと読む
で設計の指針が取り決められている。
このOSIでOSI基本参照モデルを作成されている。
国際基準としてとても重要なもの。
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が使われている。
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テンプレートとレンダリングするフォームが作れるということが分かりました!
ブログをはじめてみる
しがない女性プログラマです。
日々の備忘録として、ブログを始めることにします!
ブログを開設するのは初めてではありませんが、いつもなかなか続きません。。
まずは続けることが大事!
ダイエットと同じですね。
ブログ名は、プログラムと、プラム(すもも)を混ぜ合わせてみました。
なんとなく、可愛いかなって思って(笑)
自分好みにいろいろカスタマイズしたいなぁ
よろしくお願いします!