1

Laravel5 の Cookie 機能を拡張したいと考えています。私はこのようにしたいと思います: ファイル App\Support\Facades\Cookie.php を作成し、ファイル App\Libraries\CookieJar.php よりも作成します。app.php で、Cookie の行を次のように変更します。

'Cookie' => 'App\Support\Facades\Cookie',

とにかく、次のように使用しようとすると:

Cookie::test()

戻ります:

未定義のメソッド Illuminate\Cookie\CookieJar::test() の呼び出し

なぜこれを行うのか、何か考えがありますか?そして、どのように Cookie 機能を拡張したいのですか?

ご協力ありがとうございました。

ファイルの内容は次のとおりです。 Cookie.php:

<?php namespace App\Support\Facades;

/**
 * @see \App\Libraries\CookieJar
 */
class Cookie extends \Illuminate\Support\Facades\Facade
{

    /**
     * Determine if a cookie exists on the request.
     *
     * @param  string $key
     * @return bool
     */
    public static function has($key)
    {
        return !is_null(static::$app['request']->cookie($key, null));
    }

    /**
     * Retrieve a cookie from the request.
     *
     * @param  string $key
     * @param  mixed $default
     * @return string
     */
    public static function get($key = null, $default = null)
    {
        return static::$app['request']->cookie($key, $default);
    }

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'cookie';
    }

}

CookieJar.php:

<?php namespace App\Libraries;

class CookieJar extends \Illuminate\Cookie\CookieJar
{
    public function test() {
        return 'shit';
    }

}
4

1 に答える 1

1

すべての新しい Cookie 関数を含むクラスを拡張する必要がありますIlluminate\CookieJar\CookieJar

<?php 

namespace App\Support\Cookie;

class CookieJar extends \Illuminate\Cookie\CookieJar
{

    /**
     * Determine if a cookie exists on the request.
     *
     * @param  string $key
     * @return bool
     */
    public static function has($key)
    {
        return !is_null(static::$app['request']->cookie($key, null));
    }

    /**
     * Retrieve a cookie from the request.
     *
     * @param  string $key
     * @param  mixed $default
     * @return string
     */
    public static function get($key = null, $default = null)
    {
        return static::$app['request']->cookie($key, $default);
    }

}

次に、新しいファサードを作成します。

namespace App\Support\Facades;

class CookieFacade extends \Illuminate\Support\Facades\Facade
{

    protected static function getFacadeAccessor()    
    {
        /*
         * You can't call it cookie or else it will clash with
         * the original cookie class in the container.
         */
        return 'NewCookie';
    }
}

コンテナーで bing します。

$this->app->bind("NewCookie", function() {
    $this->app->make("App\\Support\\Cookie\\CookieJar");
});

最後に、app.php 設定にエイリアスを追加します。

'NewCookie' => App\Support\Facades\CookieFacade::class

と を使用できるようNewCookie::get('cookie')になりNewCookie::has('cookie')ました。

これが役立つことを願っています。

于 2016-07-22T05:41:54.477 に答える