Blade 模板中$errors应该如何优化在Presenters里

如何将如下代码的判断放在Presenters里,$errors只有表单验证失败时才会有的变量,不知道应该如何改造

@if($errors->first('name'))
    {!! Form::text('name',null,['class'=>'input-text error','id'=>'name']) !!}
    <label id="name-error" class="error" for="name">{ $errors->first('name') }</label>
@else
    {!! Form::text('name',null,['class'=>'input-text','id'=>'name']) !!}
@endif

参考链接:http://oomusou.io/laravel/laravel-presenter/index.html

JellyBool

你说的是这样?

@if($errors->first('name'))
    {!! Form::text('name',null,['class'=>'input-text error','id'=>'name']) !!}
    <label id="name-error" class="error" for="name">{ $errors->first('name') }</label>
@endif
shadow610 回复 JellyBool

我没有描述清楚吧,想把if的这个判断放在Presenters里,发现$errors这个变量不能放进去

比如:

namespace App\Presenters;

class UserPresenter
{
    /**
     * 性別欄位為M,就顯示Mr.,若性別欄位為F,就顯示Mrs.
     * @param string $gender
     * @param string $name
     * @return string
     */
    public function getFullName($gender, $name)
    {
        if ($gender == 'M')
            $fullName = 'Mr. ' . $name;
        else
            $fullName = 'Mrs. ' . $name;

        return $fullName;
    }
}

將原本在 blade 用 @if...@else...@endif 寫的邏輯,改寫在 presenter。

再比如

namespace App\Presenters;

use App\User;

class UserPresenter
{
    /**
     * 是否顯示email
     * @param User $user
     * @return string
     */
    public function showEmail(User $user)
    {
        if ($user->show_email == 'Y')
            return '<h2>' . $user->email . '</h2>';
        else
            return '';
    }
}

@if() 的 boolean 判斷,封裝在 presenter 內。

我的难点是$errors有时候有,有时候没有,不知道应该怎样改写,如果要依赖注入,该如何操作

JellyBool 回复 shadow610

那你不传参数不就可以了么?我还是不明白你的难点是什么