プロジェクトをcakephpに保存するためのhtmlフォームがあります。ユーザーが同じプロジェクト名を保存するように制限したい。ボディが同じプロジェクト名を入力した場合、モデルに「一意の」検証を適用しましたが、プロジェクト名の前後にスペースを入れて同じ名前を入力すると、それが受け入れられてデータベースに保存されます.それが問題です. 保存する前に余分なスペースを削除したい。
助けてください。
プロジェクトをcakephpに保存するためのhtmlフォームがあります。ユーザーが同じプロジェクト名を保存するように制限したい。ボディが同じプロジェクト名を入力した場合、モデルに「一意の」検証を適用しましたが、プロジェクト名の前後にスペースを入れて同じ名前を入力すると、それが受け入れられてデータベースに保存されます.それが問題です. 保存する前に余分なスペースを削除したい。
助けてください。
ユーザー入力から空白を削除するのに最適な場所は、コントローラー レベルtrim()
のコールバックです。beforeFilter()
PHP5+ の場合、配列関数array_walk_recursive()
を使用すると、この作業が非常に簡単になります。
例えば:
public function beforeFilter()
{
parent::beforeFilter();
// remove leading and trailing whitespace from posted data
if (!function_exists('trimItem')) {
function trimItem(&$item,$key){
if (is_string($item)){
$item = trim($item);
}
}
}
array_walk_recursive($this->request->data, 'trimItem');
}
このコードをドロップするAppController
と、すべてのフォームでユーザー入力がトリミングされます
お役に立てれば
@Prasantn Bebdraの回答への追加として、また、質問者がどこでどのように使用するかわからないためtrim()
です。
コントローラーの POST からのすべてのデータをトリミングするには ( への呼び出しの直前Model->save()
)、次のようにします。
foreach ($this->data as $key => $value) {
$this->data[$key] = trim($value);
}
beforeValidate()やbeforeSave( )などのコールバックModel
の 1 つを利用して、これを使用することもできます。この場合、後でこのデータを検証する必要があるため、beforeValidate を使用することをお勧めします。
また、入力がトリミングされることをユーザーに通知し、クライアント側で (POST の前に) そのようなトリミングを行うことも必要です。この StackOverflow の回答を確認してください。
私の研究を通じて、データが配列形式の場合は最善の解決策だと思います。次にこれを試してください=> Stackoverflow:phpで配列値の空白をトリミングする方法
一方、データが配列でない場合は、次を使用できます。
$data = trim($data);