2017-07-03 75 views
0

這是一個更普遍的問題,我希望有人指出我應該去的方向。Laravel創建函數用於不同的控制器/在同一個控制器中

1)相同控制器的功能:我有兩種方法:Store和Update在同一個控制器中。他們都應該包含一些複雜的請求驗證(我不能通過驗證器或表單請求驗證來完成,因爲它太複雜了)。這意味着我現在使用相同的代碼兩次兩種方法...我怎麼能採取這種代碼,創建一個功能,在這兩個存儲和更新方法只是一個單一的線路上使用它,比如:

do_this_function($data); 

2)功能的差異。控制器:我有許多不同的控制器使用另一個代碼。它將俄文字母音譯成拉丁字母('Сергей'='謝爾蓋'等)。我應該如何以及在哪裏註冊此功能以便能夠在不同的控制器中使用它?

transliterate_this($data); 

我讀過一些關於幫手的內容。我應該使用它們嗎?如果你是一位經驗豐富的Laravel,並且會這樣說,我會閱讀關於它們的一切。或者,如果你建議其他的東西 - 我會讀到的。:)我只是不想花時間閱讀一些無用的東西或「不正確的做法」。

感謝任何幫助!

+0

你應該接受的答案,如果他們幫助你。 –

回答

0

大家好!謝謝大家的好回答。但是我發現問題是我對面向對象編程一無所知。 (Ans我在Laravel工作:))。

當我從Laracasts採取面向對象的培訓營模式後,我開始'看到'Laravel是如何工作的,我知道可以很容易地在類中創建方法並在其他類中使用它們。

https://laracasts.com/series/object-oriented-bootcamp-in-php

(當然,你可以閱讀OOP別的東西,但傑弗里路有真正優秀的人才解釋!)

1

1)您可以創建form request validation或者您可以創建一個私有函數來處理驗證並返回結果。

2)您可以創建一個helpers.php文件,請參閱here,並將您的翻譯功能放入其中。那麼你可以從任何地方撥打它:
在控制器中transliterate_this($data);
在視圖{{ transliterate_this($data); }}

1
  1. 即使在FromRequest中也可以執行復雜的驗證。例如,您可以重寫getValidatorInstance,或重寫基類中的任何其他方法,以在基本驗證規則之上插入驗證邏輯。否則,考慮使用外部類來處理複雜的驗證,並使用Laravel的IoC容器將其注入到控制器中。

  2. 您應該創建一個外觀以提供該功能。然後你可以很容易地在任何地方使用它(並且如果這讓你感覺更好,還可以爲它創建一個輔助方法)。類似於Transliterate::toLatin($str)

相關問題