2011/10/23 日曜日

Zend_Navigation と RewriteRouter

カテゴリー: PHP, Zend Framework — hot @ 1:26:59

Zend_Navigation_Page::factory(array());
を使ってメニューなんかを作っているのだけれども、 RewriteRouter を使ったページにアクセスするとメニューのURLがおかしなことになった。

色々ググったが解決策が見つからない。ソースを追った結果以下の方法で解決。

Zend_Navigation_Page::factory(array(
 ’label’ => ‘ラベル名’,
 ’route’ => ‘default’,
 ’module’ => ‘モジュール名’,
 ’controller’ => ‘コントローラー名’,
 ’action’ => ‘アクション名’,
));

ルーターを使わないページ設定では
‘route’ => ‘default’,
を明示的に記載!!

これが分かるまでに何時間と。。。。

2009/4/29 水曜日

ZendFramework 大文字小文字

カテゴリー: Zend Framework — hot @ 11:52:04

ZendFrameworkのコア部分をいじったので覚書。

Zend/Controller/Dispatcher/Standard.php

367行目あたり
$className = $this->formatControllerName($controllerName);

アクセスするコントローラー名をフォーマットしてるんだけど、これがLinux系のサーバでは厄介な事に・・・・
例えば
/UserList/
見たいにアクセスしたとすると
UserlistController.php
と先頭文字だけ大文字にして後は小文字に書き換えられてしまう。結果、作成したUserListController.phpはリナックス上だと別ファイルと認識される。余計な事をしていると思うんだけどな・・・・

で上のソースを以下の様に修正

$className = ucfirst($controllerName) . ‘Controller’;

これでUserListをそのままでコントローラーに渡してくれる
無理やりだけど・・・

2008/6/17 火曜日

Zend Framework – ルーティング処理

カテゴリー: Zend Framework — hot @ 13:10:05

Zend Frameworkでルーティング処理を行う場合の覚書

以下のように
$ctrl->addControllerDirectory(BASE_DIR.’application/backoffice/controllers’,'backoffice’);
でbackofficeモジュールを追加してあげた場合、ルーティング追加時にちゃんと
‘module’ => ‘backoffice’,
を指定してあげないと上手く動作しない。

デフォルトのshopではいらない為、少しハマッた。
参考書には意外とこのような重要な所が抜けていることがありますね。
まーちゃんと、リファレンスガイドを読みましょうと言うことです。
http://framework.zend.com/manual/ja/index.html

以下サンプルソース

$ctrl = Zend_Controller_Front::getInstance();
$router = $ctrl->getRouter();

$router->addRoute(‘backoffice/list’,
new Zend_Controller_Router_Route(‘backoffice/list/:p’,
array(
‘module’ => ‘backoffice’,
‘controller’ => ‘list’,
‘action’ => ‘index’,
‘p’ => 1)));

$ctrl->setParam(‘noViewRenderer’,true);

$ctrl->setDefaultModule(’shop’);
$ctrl->setControllerDirectory(BASE_DIR.’application/shop/controllers’);
$ctrl->addControllerDirectory(BASE_DIR.’application/backoffice/controllers’,'backoffice’);

2007/11/22 木曜日

ZF Validatorバグ

カテゴリー: Zend Framework — hot @ 23:03:02

ZendFrameworkを色々試している今日この頃ですが、どうやらまだバグらしきものがある。
Zend_Validate_Alnum(英数字のみで構成されているときTrueをかえす)を使ってみるとどうも日本語をちゃんと処理してくれない。調べると中で使われているZend_Filter_Alnumがちゃんと機能していないとのこと。

Zend/Filter/Alnum.phpの82行目を修正

//$pattern = ‘/[^\p{L}\p{N}' . $whiteSpace . ']/u’;
$pattern = ‘/[^\p{Ll}\p{Lu}\p{N}' . $whiteSpace . ']/u’;

これでちゃんと日本語が含まれているときにエラーを返してくれるようになった。きっと他にもバグがあるのだろうけど随時バージョンアップで修正してくれるだろうと期待。

2007/11/19 月曜日

ZF デフォルトモジュール

カテゴリー: Zend Framework — hot @ 23:55:34

Zend Frameworkで、コントローラー、モデル、ビューをまとめてモジュールとすることが出来るのだけど、そのデフォルトはdefaultとなっている。これをshopモジュールとmasterモジュールで構成しshopモジュールをデフォルトに設定してみた。

index.phpを以下のように設定

< ?php
// コンポーネントをロードする
require_once 'Zend/Controller/Front.php';

$ctrl = Zend_Controller_Front::getInstance();
$ctrl->setParam(‘noViewRenderer’,true);

$ctrl->setDefaultModule(’shop’); // デフォルトモジュールをshopに設定
$ctrl->setControllerDirectory(‘../application/shop/controllers’);
$ctrl->addControllerDirectory(‘../application/master/controllers’,'master’);

$ctrl->dispatch();

あとはshop,masterにそれぞれコントローラー、モデル、ビューを作成していく。

この時注意しなければいけないのが、モジュールを作成する場合、通常コントロールのクラス名は以下のようになるが

class モジュール名_IndexController extends Zend_Controller_Action{}

shopモジュールはデフォルトに設定したのでクラス名にモジュール名は必要ない。

次ページへ »

Copyright (C) 2007-2010 HOTSYSTEMS