[英]Input::has for radio button value in if statement laravel
因此,我在laravel項目的頁面中獲得了此表單,其中表單對URL進行了獲取請求。
<div class="col-sm-2 form-group">
<div class="radio">
<label><input name="BalanceType" type="radio" value="pos">
Positiv</label>
</div>
</div>
<div class="col-sm-2 form-group">
<div class="radio">
<label><input name="BalanceType" type="radio" value="neg">
Negativ</label>
</div>
</div>
<div class="col-sm-2 form-group">
<div class="radio">
<label><input name="BalanceType" type="radio" value="null">
Noll</label>
</div>
</div>
我已經理解,如果您要具有單選按鈕,則它們的名稱最好是相同的,但是如果要選中和取消選中其他按鈕,則它們的值應該不同。
現在,我使用單選按鈕的目的是過濾不同類型的用戶及其余額(如果為負,為正或為null)。
現在我試圖弄清楚我應該在控制器的if語句中寫些什么。 在我嘗試復選框並使用if(Input :: has('name'))之前,依此類推。 這有效,但這僅適用於具有不同名稱的復選框,現在我想使用單選按鈕。
我的問題是,如何檢查具有特定類型值的單選按鈕,是否像復選框和Input :: has一樣進行檢查?
我的控制器:
public function balanceCheck()
{
$user = Auth::user();
$users = Auth::user()->school->users()->orderBy('id', 'DESC')->get();
if()
{
$users = Auth::user()->school->users()->where('balance', '>', 0)->orderBy('id', 'DESC')->get();
}
if()
{
$users = Auth::user()->school->users()->where('balance', '<', 0)->orderBy('id', 'DESC')->get();
}
if()
{
$users = Auth::user()->school->users()->where('balance', '=', 0)->orderBy('id', 'DESC')->get();
}
return View::make('admin.overview', ['user' => $user, 'users' => $users]);
}
提前致謝
如果您只想檢查單選按鈕的狀態,即檢查或不檢查,請像這樣嘗試
if(isset($_POST['BalanceType'])){
$radio_input=$_POST['BalanceType'];
if($radio_input =="some value"){
//do some thing.....
}elseif($radio_input =="some other value"){
//do some thing else.....
}else{
//the last condition goes here
}
}
像上面建議的一樣,您可以在控制器中進行簡單的檢查。 要更像Laravel風格,您可以做
$balanceType = Input::has('BalanceType') ? Input::get('BalanceType') : null;
if ($balanceType == 'pos') {
$users = Auth::user()->school->users()->where('balance', '>', 0)->orderBy('id', 'DESC')->get();
} elseif ($balanceType == 'neg') {
$users = Auth::user()->school->users()->where('balance', '<', 0)->orderBy('id', 'DESC')->get();
} elseif ($balanceType == 'null') {
$users = Auth::user()->school->users()->where('balance', '=', 0)->orderBy('id', 'DESC')->get();
}
這應該可以滿足您的需求,但這絕對不是推薦的方法。 瞧,您的控制器很快就會看起來像一團糟。 使用所有這些if語句,檢查是否要執行該操作。 這不是控制器工作。 相反,您可以將需要完成的工作委托給其他一些可能更負責做的類。 例如,在Laravel世界中,通常有Repositories
。
將存儲庫視為與您的模型進行交互的類。 它可以執行不同的數據庫查詢並獲取您所需的任何內容,僅用一行代碼即可調用存儲庫類中的適當方法,從而使控制器保持整潔美觀。 更不用說,以后,如果您需要在應用的不同部分中進行完全相同的查詢,則可以重用存儲庫中的代碼。 例如,對於您的方案,您可能具有UserRepository
類。
在app/Repositories/UserRepository.php
創建一個類
<?php
namespace Repositories;
class ArticleRepository
{
/**
* @var User
*/
protected $model;
/**
* @param User $model
*/
public function __construct(User $model)
{
$this->model = $model;
}
public function getByBalanceType($balanceType)
{
if (! $balanceType) return null;
if ($balanceType == 'pos') {
$users = $this->model->school->users()->where('balance', '>', 0)->orderBy('id', 'DESC')->get();
} elseif ($balanceType == 'neg') {
$users = $this->model->school->users()->where('balance', '<', 0)->orderBy('id', 'DESC')->get();
} elseif ($balanceType == 'null') {
$users = $this->model->where('balance', '=', 0)->orderBy('id', 'DESC')->get();
}
return $users;
}
}
之后,您可以在控制器中將此存儲庫注入構造函數中。
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
然后,您的balanceCheck
方法將看起來
public function balanceCheck()
{
$user = Auth::user();
$users = Auth::user()->school->users()->orderBy('id', 'DESC')->get();
$balanceType = Input::has('BalanceType') ? Input::get('BalanceType') : null;
$users = $this->userRepository->getByBalanceType($balanceType);
return View::make('admin.overview', ['user' => $user, 'users' => $users]);
}
但是當然可以采用第一種方法,它可能更簡單,更易於使用且更清晰。 但是,一旦您維護具有大量功能的大型應用程序,便會很快意識到后一種方法的重要性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.