2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

新人が初めての現場でZendFrameworkを触ってつまづいた部分

Posted at

#はじめに
自分が新人研修の後初めて配属された現場でZendFrameworkを触って、慣れるまでに特に時間がかかったことをまとめました。
あまりフレームワーク関係ないかもしれません。
色々間違っているところなどあるかもしれませんが、後で見返せるように残しておきたいと思います。

#①コードの読み方、探し方がわからない
たくさんのフォルダやファイルがある中でどこに何のファイルがあるのか、どう読めば良いのかがわかりませんでした。
###フォルダ構成を把握する
こちらは参考書から引用しました。
私はMVCについての概要は知っていたのですが、この例のようにベースのモジュールがあって、改修ごとにコントローラー、モデル、ビューそれぞれ継承関係を増やしていくような実用例を知らなかったので混乱してしまいました。
現場のフォルダ構成はこれとは異なっていますが、コントローラー、モデル、ビューの場所と継承関係を把握すると一気に読めるようになりました。
folder.png

###URLからファイルを探す
#####http://ベースURI/モジュール名/コントローラー名/アクション名
上の画像の例で言うと、http://localhost/default/hoge/index みたいな感じでURLからファイルを探すことができます。

###MVC
Zendは一般的なフロントコントローラパターンを使用しています。
1機能につき1つ、同名のコントローラ、モデル、フォルダがあります。
コントローラは1画面ごとにアクションと呼ばれるファンクションを持ちます。

###例
ちょっと微妙かもですが・・・

■コントローラー

<?php
    class usr_HogeController extends \defalut_Controllers_Hoge
    {
        public funciton indexAction(){
            //前の画面からパラメータを受け取る
            $params = $this->_getAllParams();
            //受け取ったパラメータをindex画面に送る
            $this->view->assign('hoge', $params['hoge']);
            //モデル呼び出し
            $model = new \usr_Model_Hoge();
            //モデルからidを取得
            $id = $model->getId();
            //idをindex画面に送る
            $this->view->assign('id', $id);
            //画面表示
            $this->render();
        }
        public function editAction(){
            ...
        }
        ...
    }
?>

■モデル


<?php
    class usr_Model_Hoge extends \defalut_Models_Hoge
    {
        function getId(){
            return $this->_getId();
        }
        ...
    }
?>

■ビュー

...
<!-- フォーム -->
<form  method="post" name="form" 
       action="<?php echo $this->baseUrl('usr/hoge/edit');?>">
<input type="hidden" name="hoge" value="<?php echo $this->hoge;?>">
<input type="hidden" name="id" value="<?php echo $this->id;?>">
</form>
...

#②ネットで検索してもドキュメントが見つからない
Zendは日本語のドキュメントが少ないです。
Qiitaはもちろん、公式ドキュメントを見ても良くわからなかったり、エラーについて検索しても同じ事例が引っ掛からなかったりします。
そういう時はPhpStormの全文検索でプロジェクト内を検索して同じようなことをやっている部分を見つけたりして解決しています。

#③DB接続の書き方がわからない
DB接続をするときにフレームワーク独特の書き方があります。
こちらのサイトがとてもわかりやすいです。
載ってないような複雑な処理は既存コードに全文検索をかけて真似したり、それでも見つからなければSQLをベタ打ちしたりしています。

#④ビューヘルパーってなに
最初のころビューヘルパーというのがよくわかりませんでした。
ビューヘルパーとはその名の通りビューでよく使う処理を書く用のクラスです。
例えばフォームの生成とか、ビューで表示するために値をちょっと整えたりとかする用に使用しています。
Zend付属のものもあるし、自分で追加もできます。

###例
・基底URLを付加する:$this->baseUrl();

//基底URLが/mypage/だったら、/mypage/usr/hoge/editになる
$this->baseUrl('usr/hoge/edit');

・チェックボックスの生成:$this->formCheckbox($name, $value, $attribs, $options);

//初期状態でチェックされている、チェックされてたらvalue=5,未チェックならvalue=-1
echo $this->formCheckbox('ex1', 5, null, array(5, -1));
echo $this->formCheckbox('ex1', null, array('checked' => true), array(5, -1));

#まとめ
###①→まずはコントローラー、モデル、ビューの場所と継承関係を把握する
###②~③→公式ドキュメントやネットで見つからない場合は既存のコードで全文検索をかけまくって似てる部分を参考にする。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?