css display:inline-blockの便利さが分かりました
inline-blockすごい便利だった。今日やっと意味が分かった。
例えばspanとかのinline要素はwidthとか設定しても適用されないけど、かと言ってdivとか使うと改行されちゃうし困った、ってときにinline-blockを使うとwidthが適用されかつ改行もされないことが分かった。要はinput要素のような扱いになるっぽい。今までfloat使ってた部分もこれで代用できるケースもありそう。
今後は忘れないこと。
cakephp1.2 componentの__constructについてメモ
コンポーネントで初期化処理したい場合は__constructを使えば問題無い。
[ステップアップ! CakePHP] Controller で Component を使う | バシャログ。
ただしここにもあるように通常はinitializeかstartupを使う。__constructとの違いはShellとかでcomponentを呼んだ時にinitializeやstartupは実行されなかったはず(多分。未確認)。なのでShellとかにも対応するのなら__constructを使うべき。
ただ__constructだとcontrollerから呼んだ時に以下のようにconroller自身を渡すことができないぽい。
function initialize(&$controller) { $this->c =& $controller; }
なので初期化処理は__constructに書いてcontrollerを渡したい場合は、別途initializeも定義すればよいと思う。(自信無いので後でちゃんと調べること)
17/12/13追記
var $componentsで普通にコンポーネントを読んだ時と違って、App::importで直接パス指定で読んだ場合も、initializeやstartupが呼ばれないぽいので__construct使うこと。
資産形成におすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
php5.3.3 centos6.8 composerインストール手順
インストール
curl -sS https://getcomposer.org/installer | php
composer.pharが出来るので移動
mv composer.phar /usr/local/bin/composer
composer.jsonを作成する
cd /usr/local/bin vi composer.json
内容
{ "require": { "monolog/monolog": ">=1.0.0" } }
jsonに書いたmonologをインストール(5~10分くらいかかる)
php composer install
vendor配下にインストールされる。後composer.lockが作成される。
さらにパッケージを追加してみる。composer.jsonにpayjpを追加。
{ "require": { "monolog/monolog": ">=1.0.0", "payjp/payjp-php": "0.0.x" } }
インストール
php composer install
エラーが出た
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them. Nothing to install or update Generating autoload files
Composerを使ってみた - 戦場のプログラマー
こちらのサイトによるとどうやらupdateが必要らしい
php composer update payjp/payjp-php
これでインストールできた
composerのrequireコマンドでパッケージを後から追加する - Qiita
こちらのサイトによるとrequireでも良かったぽい。
phpでは以下のようにrequireすれば使えるようになる。
<?php require 'vendor/autoload.php';
参考サイト
composerとは? - Qiita
composer 導入をまじめに考える - Qiita
Composer ドキュメント日本語訳
composerの使い方:Composer でphp のパッケージを楽にする - それマグで!
資産形成におすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
cakephp1.2 Shellからモデルとコンポーネントを呼ぶ方法
コントローラーであれば$usesと$componentsを使うけど、Shellの場合は$usesは使えるけど$componentsは使えない、というなんとも中途半端な感じだったのでメモ。以下のようにする。
<?php App::import('Component', 'Sample'); class TestShell extends Shell { var $uses = array('Hoge'); function initialize() { parent::initialize(); $this->Sample = new SampleComponent($this); } }
資産形成におすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
mysql group_concatにorder byを指定する時の注意事項
group_concatにorder byを指定しても意図したソートにならないケースがある。
まず以下のように、group_concatに指定したcategory_idをそのカラム順でソートするケースの場合は問題ない。
group_concat(category_id order by category_id)
問題となるのは以下のようなgroup_concatの対象(category_name)とソートの基準となるカラム(category_id)が異なるケース。この場合、category_nameがcategory_id順に並ばない場合がある。
group_concat(category_name order by category_id)
これを防ぐには【group by-group_concatする前に、データをorder byでソートしておく】ことが必要。なので一つのSQLではできない(はず)ため、サブクエリ等を使う必要がある。
select group_concat(category_name order by category_id) from ( select item_id,category_id,category_name from item i inner join item_category ic on i.id = ic.item_id inner join category c on i.id = ic.category_id order by category_id ) as tmp_tb group by item_id
資産形成におすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html
php csrf対策
参考サイト
PHPでクロスサイトリクエストフォージェリ(CSRF)対策するときのメモ - Qiita
<?php //トークンをセッションにセット function setToken(){ $token = sha1(uniqid(mt_rand(), true)); $_SESSION['token'] = $token; } //トークンをセッションから取得 function checkToken(){ //セッションが空か生成したトークンと異なるトークンでPOSTされたときは不正アクセス if(empty($_SESSIOIN['token']) || ($_SESSION['token'] != $_POST['token'])){ echo '不正なPOSTが行われました', PHP_EOL; exit; } } //GETでアクセスされたとき if($_SERVER['REQUEST_METHOD'] != 'POST'){ setToken(); } //POSTでアクセスされたとき else{ checkToken(); }
html
<form method="post" action=""> ... <!--hiddenで生成したワンタイムトークンの文字列をPOST送信--> <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>"> <input type="submit" value="登録"> ... </form>
post時にtokenをポストする必要がある
cakephp1.2 componentの$enabledでNoticeが出る件
本来componentを使うと$enabledがセットされるんだけど、beforeFilter()の中でcomponentをnewしてしまうと、$enabledが定義される前にstarup()とかを呼んでしまい、Noticeが出るのでcomponentをbeforeFilter()の中でnewしないこと。
$enabledはcomponentのstartupやらのcallbackを実行するかどうかのフラグ。falseにするとそれらが実行されない。
追記
アホだった。controllerであれば「var $components」でcomponent設定するからcomponentをnewする必要ないの忘れてた。バッチと完全にごっちゃになっていた。注意すること。