5日目
名前:wada 日付 : 2007年01月29日 19:44:43
結局どこがおかしいのか分からずじまいで、プロジェクトをそのままバックアップ。
同じディレクトリ、をつくりinit-project、init-appをやってから
必要な部分を上書きして元に戻しました・・・。また今度どこがおかしくなっていたのか調べてみるとして
まず、前日の補足。ファイルのアップロード部分は前日のリンクを見て。
userのlistSuccessテンプレートに
<?php echo form_tag('user/upload', 'multipart=true') ?>
<?php echo input_file_tag('file') ?>
<?php echo submit_tag('CSSファイルのアップロード') ?>
を追加。
で、アクションにexecuteUploadを作成。
public function executeUpload(){
$this->getRequest()->moveFile('file', sfConfig::get('sf_web_dir').'/css/'.
$this->getUser()->getAttribute('userid').'.css');
$this->redirect('user/list');
}
cssファイルをアップロードできるのはユーザーのみなのでファイル名を
userid.cssとする。
で、スタイルシートを変える際に前日はymlファイルに直接phpを書こうとしておかしくなったので
今回はアクション内で変更するという方法。
幸い独自スタイルシートを使う部分はuser/list user/showだけなのでこれで行きます。
もっと多い場合は毎回指定しなければならないってことになるので
ymlにphpを埋め込むというやつでやりたかったのですが・・・
アクション内に
$this->getResponse()->addStylesheet($css);
を追加するだけ。
で、まずはuserのアクションexecListに以下を追加。
$css = $this->getRequestParameter('user_id');
$css = myCssName::getCssName($css);
$this->getResponse()->addStylesheet($css);
今度はexecShowにuser_idパラメーターの変わりにmain_idを渡したのを追加。
でアプリケーション/libディレクトリに
myCssName.class.phpファイルを置いて
class myCssName
{
public static function getCssName($str){
$finder = sfFinder::type('file');
$finder = $finder->name($str.'.css');
$files = $finder->in(sfConfig::get('sf_web_dir').'/css/');
if (count($files))
return $str;
else
return 'default';
}
}
を追加。sfFinder参考リンク
http://develop.ddo.jp/tech/index/PHP/Symfony/documentation/Symfony101/%A5%D5%A5%A1%A5%A4%A5%EB%A4%CE%C0%DF%C3%D6
本来ならuserテーブルにフィールドを作って初期値をdefaultに、ファイルをアップロードしたらuidを。
等のもっといい方法があるのですが、勉強ということで今回はこのままで。
で、クラスを作る場合。libフォルダがプロジェクトルートディレクトリや
いろんな場所にありますがそれを使う頻度や場面に依っておきます。
また、ファイル名はクラス名.class.phpとする。ようです。
初期化しなくてもいいということでそういう縛りになっている?
で、デフォルトスタイルシートをdefalut.cssをプロジェクト/web/css/に入れておく。
以上でほぼ予定していた機能はついたのであとは使わないものの整理や
validetorで入力値の検査なんかをやればおわりって感じでしょうか??
|