正規表現はフォームのバリデーションなどでよく使うことがありますが、忘れてしまうのでメモ。 DEMO 半角数字が含まれる
正規表現はフォームのバリデーションなどでよく使うことがありますが、忘れてしまうのでメモ。 DEMO 半角数字が含まれる
DELETE_FLAG という思考停止フラグ DELETE_FLAG という boolean の列が DB 設計でよく話題になります。 論理削除という言葉で上手に論理武装し、スキを見せるとすぐに入れたがる人がおり、 一方でそれにつよく反対する人もいます。 自分の経験としては、広義の論理削除はありえると思いますが、実現方法が DELETE_FLAG だとなった時、それはあまり考えてないでなんとなくパターンとして盛り込んでる場合が多いと感じます。 ただし、設計に唯一の答えは無いので、もしかしたらそれが妥当な設計である場合があるかもしれません。 今回は「DELETE フラグがなぜダメなのか?」などという話をするつもりも、アンチパターンだと断言するつもりもありません。 問題は、仕様をきちんと把握すると、「最適な設計は DELETE_FLAG ではない」という場合が有って、その場合は、その最適な設計
val().lengthでは正確にはカウントできない Twitterの投稿には140文字までの制限があります。 よくTwitterのAPIを利用した投稿アプリで文字数のカウント機能を 実装することがあると思いますが、単純に のようにカウントすると、おかしくなるときがあります Twitterでは、URLは必ず短縮される まず、Twitterでは投稿中のURLは全てTwitter独自の短縮URLの仕組みであるt.coで短縮されるため URLの長さに限らず文字数は、 http: 23文字 https: 22文字 と決まっている。 以下のような文章は、 普通にカウントすれば、22文字だがTwitterだと29文字になる。 一部文字のカウント数も異なる これは検証したのが、かなり前なので詳しくは覚えていないのですが、 一部の特殊な文字(サロゲートペア)に対する扱いも、 val().length と
ぼんやり1メンバーとして眺めていたプロジェクトが、リリース1週間前になって「あれも足りない!これも出来てない!どうすんじゃゴラァ」となったときに突如ディレクターとしてぶっこまれ投入されたときにやってみたことのメモ。 一次対応 とにもかくにもPJTに投入されて最初にやったこと。 コミュニケーションルールをみんなで確認して、守ってもらうようにした 誰が何の情報を持ってて、そして誰から誰にどんな指示が出てて、それらがどんなステータスか、、、 もうぐっちゃぐちゃになっていた。 ディレクターは一度死ぬが、一旦全部ディレクターに報告させて、ディレクターから適切な人に指示を出すことにし、メンバー同士でのダイレクトなコミュニケーションをいったん、原則禁止した。 (ディレクターがAさんとBさんで直接やって、と指示を出すときもあるが、それもやりとりの結果をAさんから必ずフィードバックさせるようにした。) ただ
使ってみる 例えば、100ユーザが同時にhttp://www.example.co.jp/ に1リクエストを発行した場合を想定。 ab -n 100 -c 100 http://www.example.co.jp/ 同時に100ユーザが、1ユーザーあたり10リクエストを発行した場合を想定。 -nには100 x 10 = 1000を指定します。 ab -n 1000 -c 100 http://www.example.co.jp/ 接続先にベーシック認証がかかっている場合。 -Aの後にベーシック認証ユーザとパスワードを:(コロン)で区切って指定します。 ab -n 100 -c 100 -A hogeuser:hogepass http://www.example.co.jp/ 同時接続数よりTotal発行リクエスト数が少ないとエラーメッセージが表示されます。 同時に100人で合計10リクエ
ねとけん Advent Calendar 2015 の 24日の記事です.一応ガジェットネタです. 2021/10/02 古い記事ですが見てくれる人がいるようなので少し追記しました. プロローグ(※フィクションです) コンビニ帰り,マンションのエントランスで家の鍵を持っていないことに気付きます.鍵は家の中=部屋の鍵は開いている,ということなのですが,マンションのエントランスにあるこいつが帰宅を阻みます. こいつです.拡大します. アイ○ンです.色々なところで見かけます. こんなとき,フィクションの世界なら,仲間の凄腕のハッカーが怪しいカードをスリットに挿しこみ,接続された端末に謎の文字列がしばらく流れたあと,めでたくドアが開くのですが,残念ながら都合よくそんなハッカーの連れがいないし,そもそもカードを挿すスリットもありません.また,多くの場合,管理会社や不動産会社が使う番号が設定されていた
クラウドワークス Advent Calendar 17日目担当のSMTPおじさんの記事です。 時間の無い人のために3行でまとめますと以下のコンテンツでお送りします。 大規模なメール配送を安全に行うには特別なノウハウがあり罠も多い SendGrid便利です 当たり前になった技術は空気のように見えなくなってインフラ化する。それがある日突然失われたときの被害は甚大。インフラ技術をキャッチアップして備えよう メール配送今昔 さて、メール配送といえば古くはSendmailを使っていました。多くのUnixディストリビューションに標準でインストールされており、使うのが当たり前で選択肢も少なかった時代です。 Sendmailは開発が重ねられることで複雑化しセキュリティホールが頻発しました。また設定ファイルのsendmail.cfはチューリング完全であるほど高機能で複雑でまた長くなりがちでもあり今でも書きた
PHPはよくDISられることがあります。しかし、実際にはほとんどPHPを利用していない人が印象だけでDISってることが多いような気がします。 そこで、PHPがよくDISられている点について、実際どうなのかをPHP未体験者向けに解説していきたいと思います。PHPを触ったことない人でもわかりやすいようにシンプル目な仕様のRubyを例に説明していきたいと思います!( Ruby触ったことなくても、その他のOOP言語を触ったことあれば雰囲気は理解できるように書いています ) DIS例1 / PHPは配列操作がしづらい PHPの配列操作は扱いづらい等とDISる人たちがいます。実際のところどうでしょうか。 以下のような処理を配列への中間変数を用いず行うコードを例に考えてみます。 0. [2,4,6,8,10]という配列を用意して 1. ↑の配列から8以下の数だけを選択した配列を作る 2. ↑の配列から各
アイデア元 Web アプリの MVC 設計まとめ - もやし日記 概要 上記のリンク先の目次がそのまま解決したい課題となっています。以下に抜粋します。 肥大化するコントローラを避ける ビジネスロジックをどこに書けば良いのか コントローラとモデルの間にもう一つの層があるとうまくいく? これを CakePHP で解決する方法を検討します。 解決案 - Logic モデルを作成する ※ 2015-05-12 追記 Logic コンポーネントの方がよいのでは、という議論もコメント欄でしていますので、合わせて参照下さい。 ※ 2016-07-21 追記 下記記事にある 「Service層」のことをやりたい、という話でした。 Webアプリケーションの構成に関する予備知識 http://qiita.com/okeyaki/items/37eb4b66bd8ef62c1fe8 検討といいつつ自分が実践して
こんにちはPHP Matsuriでは色々とお世話になってる@kozoです。 この記事は2014年CakePHP Advent Calendarの11日目です CakePHP 3系からモデルは大きく変わり、戻り値が配列からオブジェクトになるとか、Modelが1ファイルだったものがTableとEntityに分かれるなど色々変わって非常に便利になってます! 今回は大きく変わったもう1個のfind(SELECT句)のSQLの組み立て方法について調べてみました。 find QueryBuilderの開始地点になり、SELECT用のQueryオブジェクトが生成されます。 QueryオブジェクトをメソッドチェーンでつなげることでSQLを組み立てます。 // 基本的な使い方 $this->Users->find() ->where(条件A) ->where(条件B) ->order(ソート条件A) ->o
http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html http://blog.ecworks.jp/archives/268 http://qiita.com/kazu56/items/eaaa0c2d7294a28ac21c http://qiita.com/moriyant/items/b57ee4fc45af2fc03194 hasとbelongが、すぐどっちがどっちかわからなくなる。 「持っている」とかアバウトな言葉じゃなくてテーブル定義で教えてくれ。 結論 hasMany 相手テーブルに、自分テーブル.idへの外部キーがある。 hasOne hasManyだけど外部キーがUNIQUE。 belongsTo 自分のテーブルに、相手テーブル.idの外部キーがある。 hasAndB
CakePHP3から新しく追加されるEntityクラスの簡単なまとめ 環境構築についてはCakePHP dev-3 + Windows7 + IIS + MySQLの環境構築を参照 概要 ファイル名・クラス名 Getter と Setter Eager loading と Lazy loading その他 概要 2.xまでのModelクラスは、3.xではTableクラスとEntityクラスに分離される Tableクラスは主に下記のような機能を有する(2.xまでのModelクラスと機能的にはほぼ同じ) データのCRUD アソシエーション バリデーション Entityクラスはクエリ結果の各レコードにアクセスするためのクラス namespace App\Model\Table; use Cake\ORM\Table; class ArticlesTable extends Table { pub
【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 脆弱性について 参考リンク PHPにおけるファイルアップロードの脆弱性CVE-2011-2202 PHP 5.4.1リリースのポイント 上記に対する補足説明 PHP 5.4.1以降 PHP 5.3.11以降 どちらかを満たしているならば,脆弱性は(今のところ)無い.どちらも満たしていないと, $_FILES 変数の構造を崩す攻撃 ../ をファイル名に含めて送信する攻撃 (ディレクトリトラバーサル) の何れか,もしくは両方の脆弱性を所持していることになるので要注意. 脆弱性対策と注意事項 $_FILES Corruption 対策 改竄されたフォームからの複数ファイル配列送信対策 脆弱性が修正された環境でも 改竄フォーム対策 も兼ねて
最低限書いておきたいというよりは、最低限書いて下さいという私の切なる願いかもしれない。 そもそも何故Docコメントを書くのだろうか? メソッドの命名さえ正確に行えるならDocコメントという存在はほぼ必要無いという考えがあり、 それは間違いでは無いでだろう。 しかし… 型が無いためにメソッド名を冗長にしてしまう 以下のコードは税率を取得するだけの単純なものだ。 TAX::getRate()と実行することで税率を取得出来る。 これなら、主語=TAX、述語=getRateと読み取れるので何をしているのか一目瞭然である。 class Tax { private static $tax_rate = 0.8; public static function getRate() { return self::$tax_rate; } } しかし、これは戻ってくる値の型を予約出来る静的片付け言語であればの
<?php namespace App\Model\Table; use Cake\ORM\Query; use Cake\ORM\Table; use Cake\Validation\Validator; /** * Lists Model */ class ListsTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config) { $this->table('lists'); $this->displayField('name'); $this->primaryKey('id'); $this->hasMany('Tasks
まあ要はこうしたいということですね。 とは言え普通のセレクトボックスのようにemptyを指定しても、こんな感じにしか指定できません。 echo $this->Form->input('誕生日', array( 'type' => 'date', 'dateFormat' => 'YMD', 'monthNames' => false, 'empty' => '選択してください', )); echo $this->Form->input('誕生日', array( 'type' => 'date', 'dateFormat' => 'YMD', 'monthNames' => false, 'empty' => array('year' => '年', 'month' => '月', 'day' => '日'), ));
モデル周りも触り出すようになって何となくバリデーション周りも書き方が分かってきたのでまとめてみます。 バリデーションの掛け方 普通の保存(ほぼbake) //Controller $hoge = $this->Hoges->newEntity(); if ($this->request->is('post')) { $hoge= $this->Hoges->patchEntity($hoge, $this->request->data); if ($this->Hoges->save($hoge)) { //OK } else { //NG } } $this->set(compact('hoge'));
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く