[PHP] 入門・再入門者向けブックマークと書籍

このブログにある一番古いPHP絡みの記事は2007年なので、5年経ってるんですけど、
2011年以降はPHPほとんど使ってなくてすっかり忘れてしまいました。
ZeroMailの更新どころか自作すら危うい有様で、いままさに再入門しているところです。

コメントでとてもタイムリーな質問を頂いたので

はじめまして。私はプログラミングもPHPも、初心者です。

「やさしいPHP」という本を読み終わったのですが、そのあとにどのような書籍を読めばいいのか迷っています。

Tenderfeelさんのように自分で認証コードや掲示板を書けるようになりたいのですが、何かアドバイスを頂けない

でしょうか?

この記事で今よく見ているブックマークとかを晒してみます。

“[PHP] 入門・再入門者向けブックマークと書籍” の続きを読む

[ZF] Zend_Form : Remove the submit-button value from url parameters

Zend_Formでフォームエレメントを作る場合にはnameが必須なんだけど、
GET送信するとnameがあるばかりにボタンまでURLに含まれてしまうので
Redirectorによる回避策を試してみた。

検索のフォーム。methodをpostにする。

class Application_Form_Search extends Zend_Form
{
	functions init(){
	$this->setMethod('post')
		->clearDecorators()
		->addDecorator('FormElements')
		->addDecorator('HtmlTag',array('tag'=>'div', 'class' => 'zend_form'))
		->addDecorator('Form');
			
	$this->addElement('text', 'keyword', array(
		'label'      => 'Keyword',
		'required'   => true
	));
	
	$this->addElement('submit',
		'submit',
		array(
			'label'    => 'Search',
			'required' => false,
			'ignore'   => true
		)
	);
	}
}

検索する場所は仮にindexとして、index.phtmlには検索フォームを表示しておく。

getRequest()->isPost()で送信された値があり、バリーデーションもtrueなら
送信された値($params)からボタンを削除(unset)する。
アクションヘルパーのRedirectorに$paramsを渡してsearchActionにリダイレクトする。

public function indexAction()
{
	$this->view->searchForm = $this->_searchForm;
	
	$request = $this->getRequest();
	$params = $request->getPost();
	
	if($request->isPost() && $this->_searchForm->isValid($params)){
		unset($params['submit']);
		$this->_helper->Redirector->setGotoSimple('search', null, null, $params);
	}else{
		$this->view->data = $this->_mapper->fetchAll();
	}
}

※$this->_searchForm —> instance of Application_Form_Search
※$this->_mapper —> instance of DataMapper

searchActionに飛ばされた時、検索キーはZendライクなGETパラメーター(/key/value/のパターン)になっているので、
getRequest()->getParams()でキーワードとかを取り出して使う。

public function searchAction()
{
	$request = $this->getRequest();
	$params = $request->getParams();
	
	$this->view->data = $this->_mapper->search($params);
	$this->view->searchForm = $this->_searchForm->populate($params);
	
	$this->render('index');
	
}

[ZF] Zend_Form 要素に対するデコレータの設定についての色々

最近Zend Frameworkを使い始めたんですがね、
Form要素を作る時、日本人的にはテーブルの方がしっくりくるじゃないですか?
バリデーションに続き海外製では良くあることですが、Zend_Formはデフォルトが定義リストなんです。
出力はラベルとフォーム要素のペアで、ラベルを指定しなかった場合はラベルのテキストが空白文字になります。
dtが空っぽだなんて気になるじゃないですか。私だけですか?
まあ兎に角自分好みにマークアップすべく、Zend_Formを調教してみることにしたわけです。

Default

これはクイックスタートで作るGuestBookのsignフォームです。
テキストボックスの角丸とか必須入力の赤文字とかはCSSの効果です。

zend_form_normal zend_form_normal-source

“[ZF] Zend_Form 要素に対するデコレータの設定についての色々” の続きを読む

[PHP5] OOPで掲示板を作ってみる – Step8:ページング

オブジェクト指向プログラミングでフレームワークを使わずに掲示板を作るよその8。
ページングって面倒だよね。

目次

  • 序章
  • Step1 : MVCを揃える
  • Step2 : テンプレート作成
  • Step3 : 書き込み
  • Step4: ログの表示
  • Step5: 設定ファイルと細かな修正
  • Step6: 編集&削除画面
  • Step7: 編集&削除機能
  • Step8: ページング ← 今ここ

“[PHP5] OOPで掲示板を作ってみる – Step8:ページング” の続きを読む

[PHP5] OOPで掲示板を作ってみる – Step7:編集&削除機能

オブジェクト指向プログラミングでフレームワークを使わずに掲示板を作るよその7。
画面が出来たから編集と削除が出来るようにしようそうしよう。

目次

  • 序章
  • Step1 : MVCを揃える
  • Step2 : テンプレート作成
  • Step3 : 書き込み
  • Step4: ログの表示
  • Step5: 設定ファイルと細かな修正
  • Step6: 編集&削除画面
  • Step7: 編集&削除機能 ← 今ここ
  • Step8: ページング

“[PHP5] OOPで掲示板を作ってみる – Step7:編集&削除機能” の続きを読む

[PHP5] OOPで掲示板を作ってみる – Step6:編集&削除画面

オブジェクト指向プログラミングでフレームワークを使わずに掲示板をcreateその6。
編集と削除の機能を作る前に画面を作らねばならぬ!

目次

  • 序章
  • Step1 : MVCを揃える
  • Step2 : テンプレート作成
  • Step3 : 書き込み
  • Step4: ログの表示
  • Step5: 設定ファイルと細かな修正
  • Step6: 編集&削除画面 ← 今ここ
  • Step7: 編集&削除機能
  • Step8: ページング

“[PHP5] OOPで掲示板を作ってみる – Step6:編集&削除画面” の続きを読む

[PHP5] OOPで掲示板を作ってみる – Step5:設定ファイルと細かな修正

オブジェクト指向プログラミングでフレームワークを使わずに掲示板作成その5。
設定ファイル作成・2重送信防止・メッセージ変更の3本で~す

目次

  • 序章
  • Step1 : MVCを揃える
  • Step2 : テンプレート作成
  • Step3 : 書き込み
  • Step4: ログの表示
  • Step5: 設定ファイルと細かな修正 ← 今ここ
  • Step6: 編集&削除画面
  • Step7: 編集&削除機能
  • Step8: ページング

“[PHP5] OOPで掲示板を作ってみる – Step5:設定ファイルと細かな修正” の続きを読む

[PHP5] OOPで掲示板を作ってみる – Step4: ログの表示

オブジェクト指向プログラミングでフレームワークを使わずに掲示板作成その4。
書き込んだ内容を表示して初めて掲示板となるのだ!フーハハー

目次

  • 序章
  • Step1 : MVCを揃える
  • Step2 : テンプレート作成
  • Step3 : 書き込み
  • Step4: ログの表示 ← 今ここ
  • Step5: 設定ファイルと細かな修正
  • Step6: 編集&削除画面
  • Step7: 編集&削除機能
  • Step8: ページング

このエントリーで掲示板の基本完成。
“[PHP5] OOPで掲示板を作ってみる – Step4: ログの表示” の続きを読む

[PHP5] OOPで掲示板を作ってみる – Step3: 書き込み

オブジェクト指向プログラミングでフレームワークを使わずに掲示板を作るその3。
ログ手打ちするの面倒だから先に書き込み実装します。

目次

  • 序章
  • Step1 : MVCを揃える
  • Step2 : テンプレート作成
  • Step3 : 書き込み  ← 今ここ
  • Step4: ログの表示
  • Step5: 設定ファイルと細かな修正
  • Step6: 編集&削除画面
  • Step7: 編集&削除機能
  • Step8: ページング

“[PHP5] OOPで掲示板を作ってみる – Step3: 書き込み” の続きを読む

[PHP5] OOPで掲示板を作ってみる – Step1~Step2

「PHP ○○ 作り方」みたいなキーワード検索するとべた書きの作り方がHitしまくる。
それなのにOOPなサンプルはあんまり見つからない。言語を英語にしても。
キーワードをMVCにすると結構ヒットするんだけど、殆どがフレームワークの使い方だったりして。

OOPの例としてよくあるのはオブジェクト指向プログラミングで書いたようなクラス単体のものだと思う。
でも実際何か作ろうとしたらクラスひとつで足りるわけがないし、クラス書いたすぐ真下で実行なんてしないじゃん?
ZendとかCakeとかPEARみたいなフレームワークを使って何かを作るにしても
クラスをどうアレすれば掲示板とかになるの?って疑問は解決しない。
フレームワーク使えばそりゃ掲示板の一つや二つさくっと出来ますよ?
出来るけどフレームワーク使うほどでもない時もあるし、OOPで組めって言われた時困るから本質が知りたい。
それで、探して見つからないなら形にして達人からのコメント待てばいいじゃない!って結論に至ったので
独学で得た情報を元にオブジェクト指向な掲示板を作ってみることにしました。

暇を持て余したOOP達人が見てくれることを期待しながら 😀

なお、この記事はある程度ベタ書き経験があり、オブジェクト指向プログラミングに書いてあることが一通り理解出来ている人じゃないと意味不明だと思います。

“[PHP5] OOPで掲示板を作ってみる – Step1~Step2” の続きを読む

[CakePHP] Pagination + Search ページ遷移時に検索条件を維持させる

CakeのPagenateについて。バージョンは1.3。

Pagenate使ってるときにconditionsを使うと、自動生成されるナビゲーションにはその条件が反映されない。
1ページ目は検索条件通り出てるのに2ページ目に進むとクリアされる現象が起きる。
その事についてはかなり既出のようだ。

検索条件を維持したままページ遷移するにはPagenateにクエリを渡さなければならない。

view/posts/index.ctp

<?php
//ファイルの先頭
$paginator->options(array('url' => $this->passedArgs));
?>
<?php echo $this->Form->create('Post',array('name'=>'search')); ?>
<?php echo $form->select('search.category', $category_label, NULL); ?>
<?php echo $this->Form->end('Search');?>

$category_label はfind(‘list’)で得たカテゴリーのidとラベルが入っているものとする。
(カテゴリーの選択は1記事あたりに1つのみってことで)
これで送信するとPostsControllerのindexメソッドで$this->data[‘search’]として受け取る事が出来る。

controller/posts_controller.php

var $paginate = array(
        'limit' => 25,
        'order' => array(
            'Post.id' => 'asc'
        )
    );
function index()
{
	if(is_numeric($this->data['search']['category'])){
		$this->paginate['conditions']['category'] = $this->data['search']['category'];
		$this->passedArgs['category'] = urlencode($this->data['search']['category']);
	}
	if(!empty($this->passedArgs['category'])){
		$this->paginate['conditions']['category'] =  $this->passedArgs['category'];
	}
        $this->set('posts',$this->paginate('Post'));
}

Pagenateの設定の仕方は殆どfind()と同じらしい。
$this->passedArgsに配列形式でクエリを渡せばページ移動しても検索状態が維持出来る。

渡す値は一応Sanitizeしといた方がいい気がする。

App::import('Sanitize');
Sanitize::clean($this->data['search']['category']);

[CakePHP] PagenatorのURLをGETな感じに変更したい

CakePHPのPagenationの便利さに感動したのも束の間、URL見て我が目を疑う。

http://example.com/news/page:3/sort:id/direction:asc

なにこれ!(゚Д゚lll) なんでコロン!?
世のCake使いのみなさんはこのURL気持ち悪くないんだろうか?

普通にアンバサンドとイコールで繋げてあるやつがいいんだけど…

http://example.com/news/?page=3&sort=id&direction=asc

検索しても根本的な解決方法が見つからないまま朝日を拝む始末…(今6時)

試しに後者のURLを打ち込んでみたら同じ動作になったから、
アンバサンドとイコールのURLでもソートやページングは機能するらしかった。
なら変更も出来るのじゃないかと検索していたら、変更した場合の問題についてのレスが見つかる。

“[CakePHP] PagenatorのURLをGETな感じに変更したい” の続きを読む

[php] Gettext + Poedit で多言語化

カナに切り替えるのが面倒で全部半角英数で作ったらいたく不評だった、なんて経験あるかもしれない。

翻訳前(en)

じゃせめてUIくらいは日本語にするか…と思ったなら、ローカライズしとけば一石二鳥じゃないか? 😀

wordpressのテンプレートファイルを翻訳する方法と似たような方法で普通のPHPウェブページやCGIも多言語化出来る。
gettextで検索するとコマンド-xgettextを使う方法が出てくるが、Windowsじゃ使えないし目も疲れるし
Poeditという素晴らしいソフトがあるのでコマンド使わずに出来る方法をメモっておくことにする。

続きを読む前にPoeditを公式サイトからダウンロードしてインストールしよう。
シンプルなアプリケーションだからそう難しくはないはず。
“ Gettext + Poedit で多言語化” の続きを読む