カテゴリ: プログラミング, API, C/C++, Javascript/Java, PHP, CakePHP, WSH/VBScript

ページ: << 1 ... 2 3 4 5 6 7 8 9 10 11 12 ... 16 >>

CakePHPでパラメータにスラッシュが使えない

パーマリンク 2009/03/04 23:45:27 著者: kumaold メール
カテゴリ: 仕事, プログラミング, PHP, CakePHP

アクセス解析の製作中、CakePHPでURLにスラッシュ(/)を含むパラメータの取り扱いに苦労したので書いておきます。


アクセス解析に限らず、URLを扱うような場面ではURLのパラメータにスラッシュを使いたいということがあると思います。

もちろん、urlencode()で%2Fにしてから渡すのは当たり前ですが、それでもCakePHPのコントローラの引数で普通に受け取ることができません。


以下のようなmod_rewriteの問題もありますが、とりあえずそれは抜きにして。

mod_rewriteの「%2F」問題の解決法(ElectronicBrain is eating BreakFast)


どうやら内部処理で初めにurldecode()をしているのか、%2Fもデコードされて通常のスラッシュ(/)と同等となり、区切りがずれてしまうのが原因のようです。

URLのパラメータとしてスラッシュを渡すと処理ができない(cakephp.jp)


通常のGET(?url=....&....)で渡せば解決するのは分かりきったことですが、他に3つほどパラメータを渡す関係でURLが長くなるのも嫌です。

方法としては、$this->params['url']['url']を毎度正規表現で分割する手もありですが、面倒なので極力やりたくありません。

・・・・・・・

そこで仕方なく、スラッシュを置換する方法をとることにしました。

 置換前:www.example.com/hoge/path/
  ↓
 置換後:www.example.com__hoge__path__


別にアンダーバーでなくてもよかったんですが、一番見た目がすっきりするので。

これなら、ファイル名にまず2連アンダーバー(__)が使われることもなく、_で始まるか終わるファイル/ディレクトリ名もまずないので大丈夫かと。


これをビューにエンコード用関数、コンポーネントにデコード用関数を実装することで解決できました。


NO IMAGEスラッシュ自伝 (仮) (単行本)
シンコーミュージック 2009-03-31

タグをヘルパー出力したときの改行

パーマリンク 2009/01/29 23:03:38 著者: kumaold メール
カテゴリ: プログラミング, PHP, CakePHP

CakePHPに限ったことではなくPHPの問題でもあるんですが、1行をまるごと<?php ?>で囲んで出力すると、その行の最後の改行が反映されません。

たとえば、こんな感じに1行につながってしまうんでHTMLソースが悲惨な状態に。


View上での元のソース

<td>
    <?php e($form->text('Model.field1')); ?>
    <?php e($form->text('Model.field2')); ?>
</td>


出力されたHTMLのソース

<td>
    <input name="data[Model][field1]" type="text" value="" id="ModelField1" />    <input name="data[Model][field2]" type="text" value="" id="ModelField2" /></td>


しかし、FormHelperとかHtmlHelperを使わずに書くのはスマートではないし、毎度."\n"するのも手間がかかるんでどうしようかと考えていました。


どうもこれはPHPの仕様で、公式マニュアルのFAQにも書いてあります。


そこで、?>の直後に半角スペースをひとつ置いてみることにしました。

こうするとこで、Viewソースの見た目は変わらずに出力HTMLを整形できます。

<td>
    <input name="data[Model][field1]" type="text" size="50" value="" id="ModelField1" /> 
    <input name="data[Model][field2]" type="text" size="50" value="" id="ModelField2" />
</td> 


その行の出力がないところは無駄な改行が出てしまうデメリットはあるとしても、横に伸びるよりはマシなので使っていこうと思います。

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

シェルからコンポーネントを使う

パーマリンク 2009/01/22 23:28:37 著者: kumaold メール
カテゴリ: プログラミング, PHP, CakePHP

CakePHPの機能の一つであるシェルでは、CakeのDBの扱いやすさはそのままでバッチ処理が書けるので便利に使っていますが、若干の制約があります。


どうもシェル=コントローラではないようで、長くなる処理をコンポーネントに分割しても普通にコンポーネントを呼び出すことができません。

普通はコントローラでこのように書けば大丈夫です。

var $components = array('ComponentName');


そこで、こちらの記事を参考にシェルでコンポーネントを使う方法を試してみました。

あらかじめコンポーネント単体をインポートしておき、インスタンス化することでアクセスできるようになるということです。

最低限の普通な使い方なら、これだけでコンポーネントが使えます。

//コンポーネントをインポートする
App::import('Component', 'ComponentName');

class SampleShell extends Shell
{    
  function startup()
  {
    $this->ComponentName = new ComponentNameComponent($this);
  }
}


これで数百行になってしまったバッチ処理を片付けられます。
 
 

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 ... 2 3 4 5 6 7 8 9 10 11 12 ... 16 >>

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software