1

ビューにバインドしようとしたデータが、特定の場所にバインドを登録した場合にのみ機能するという問題があります。

たとえば、App::before()フィルターにバインドしようとすると、機能しsuccessMessages、すべてのビューで使用できます。

App::before(function($request)
{
    View::share('successMessages', array('All good', 'Nailed it', 'Perfect'));
});

ただし、BaseController コンストラクター (すべてのコントローラーが継承する) で実行しようとすると、変数が見つからないというエラーが発生します。

class BaseController extends Controller
{
    public function __construct()
    {
        View::share('successMessages', array('All good', 'Nailed it', 'Perfect'));
    }
}

メソッドの代わりにビュー コンポーザを使用しようとすると、同じ問題が発生しますView::share()

View::composer(array('layouts.application', 'layouts.home'), function($view)
{
    $view->with('successMessages', array('All good', 'Nailed it', 'Perfect'));
});

これらがApp::before()フィルターに登録されるのにコントローラーコンストラクターには登録されない理由はありますか?

4

1 に答える 1

3

メッセージをコントローラーに渡す場合、ほとんどの場合、コントローラーを使用していないルートで見つからない変数を取得しているため、BaseController は構築されません。

たとえば、これ (チェック済み) は希望どおりに機能します (BaseController はそのままにしておきます)。

Route::get('testit',
array('as' => 'testing',  'uses' => 'App\Controllers\Site\SomeController@gsomeMethod')

);

BaseController から継承してビューを構築するコントローラーのメソッドの場合、ビューで $successMessages を使用できます。

于 2013-10-21T08:02:10.097 に答える