2017-06-29 58 views
0

我正在構建一個窗體,其中的值將構建一個對象的調用數組。對象調用使用thumbor圖像處理服務生成圖像URL。表單輸入構建對象調用字符串提交

目標:使用html表單構建$obj -> methodOne() -> methodTwo();查詢,並使用ajax輸出響應。

典型PHP對象調用應該是這樣的:

echo $thumbnailUrlFactory 
    -> url('http://example.com/image.jpg') 
    -> fitIn('500', '400') 
    -> addFilter('Brightness', '70') 
    -> smartCrop('True'); 

輸出看起來是這樣的: http://myserver.com/SECURITY_HASH_STRING/500x400/filters:brightness(70)/smart/http://example.com/image.jpg

HTML表單

<form> 
    <input type="text" name="image_url"> <!-- Value: http://example.com/image.jpg --> 
    <input type="text" name="fit_in"> <!-- Value: '500', '200' --> 
    <input type="text" name="filters['brightness']['value']"> <!-- Value: 70 --> 
    <input type="text" name="filters['contrast']['value']"> <!-- Value: 40 --> 
    <button type="submit">Submit</button> 
</form> 

重要事情o注意大概有30種不同的過濾器和8種不同的作物類型。我不能只是建立一個調用每個可能選項的php調用,因爲它會覆蓋一些其他調用。

我的表單將顯示URL並且適合加載時的輸入字段。 然後我有一個按鈕來添加額外的字段對:一個「過濾器名稱」和一個「過濾器值」。

什麼是最好的方法來處理?

+0

所以如果你想使用的值從提交的表格,讓您的命令時,它會是什麼($ _ POST [「image_url」]) - > fitIn($ _ POST [「fit_in_1」],$ _POST [「fit_in_2」]) - > addFilter($ _ POST [「filter_name」 ],$ _P OST [「filter_value」]) - > smartCrop($ _ POST [「smart_crop」]);(這和你的示例中的名稱略有不同,看起來不太合適)。當然,你希望在將它們直接傳遞給你的方法之前驗證所有的輸入,但是希望這可以給你提供想法。 – ADyson

+0

你是對的 - 但是,假設'brightness'變量是空的。這會在URL字符串中留下'/ filters:brightness()/'。所以它需要包含一個'if'語句。如果設置了亮度,請添加適當的方法調用。目前,如果在調用之前使用if if將產生500錯誤。 –

+0

這就是進行呼叫之前驗證數據的過程。如果這不是可接受的情況,請停止執行並向用戶返回錯誤,要求他們完成所有必填字段。 – ADyson

回答

1

答案很簡單:將方法分開而不是一個字符串。直到今天,我都不知道我們能做到這一點。

的語法被稱爲方法鏈

<?php 
$image = $thumbnailUrlFactory -> url ($_POST['url']); 

if (!is_null($_POST['fitIn'])) { 
    $image = $image -> fitIn ($_POST['fitIn']); 
} 

if (!is_null($_POST['smart'])) { 
    $image = $image -> smartCrop ('true'); 
} etc... 

有效,這建立:

$image = $obj; 
$image = $image->methodOne(); 
$image = $image->methodTwo(); 
$image = $image->methodThree(); 
$image = $image->methodFour(); 
etc...