Download the PHP package enlight/stash-view without Composer

On this page you can find all versions of the php package enlight/stash-view. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package stash-view

Stash View

Stash view is a composer package for Laravel which caches views using Russian Doll Caching methodology.

What is Russian Doll Caching ? It is really famous caching stratergy to cache your views into small chunks. It is quite famous in Rails community. If you are interested to know more checkout this link.

In a nutshell, It caches your views into chunks. This article will give you more clear idea.

Russian Doll Caching PNG

Now enough about idea let's talk about how to use it

You can also checkout example code from here

Want video explaination of internals? check this youtube link.

Installation

Step 1: Composer

Firstly require this package using following command.

Step 2: Service Provider (Optional)

This package supports auto discovery but if you are using Laravel 5.4 or below you need to add ServiceProvider into providers array.

For your Laravel app, open config/app.php and, within the providers array, append:

This will bootstrap the package into Laravel.

Step 3: Cache Driver

For this package to function properly, you must use a Laravel cache driver that supports tagging (like Cache::tags('foo')). Drivers such as Memcached and Redis support this feature.

Check your .env file, and ensure that your CACHE_DRIVER choice accomodates this requirement:

NOTE: If your application is set to local environment then by default this package will use array caching driver to speed up development process so that you don't need to clear cache again and again while developing.

Have a look at Laravel's cache configuration documentation, if you need any help.

Usage

The Basics

With the package now installed, you may use the provided @cache Blade directive anywhere in your views, like so:

By surrounding this block of HTML with the @cache and @endcache directives, we're asking the package to cache the given HTML. Now this example is trivial, however, you can imagine a more complex view that includes various nested caches, as well as lazy-loaded relationship calls that trigger additional database queries. After the initial page load that caches the HTML fragment, each subsequent refresh will instead pull from the cache. As such, those additional database queries will never be executed. Really cool side effect of this package is it reduces you sql queries and solves n+1 problem out of the box.

Please keep in mind that, in production, this will cache the HTML fragment "forever". For local development, on the other hand, we are using array cache driver which stores the cache in memory and flush out when work done. That way, you may update your views and templates however you wish, without needing to worry about clearing the cache manually.

Now because your production server will cache the fragments forever, you'll want to add a step to your deployment process that clears the relevant cache.

Caching Models

While you're free to hard-code any string for the cache key, the true power of Russian-Doll caching comes into play when we use a timestamp-based approach.

Consider the following fragment:

In this example, we're passing the $post object, itself, to the @cache directive - rather than a string. The package will then look for a getCacheKey() method on the model. We've already done that work for you; just have your Eloquent model use the Enlight\StashView\Traits\Cacheable trait, like so:

Alternatively, you may use this trait on a parent class that each of your Eloquent models extend.

That should do it! Now, the cache key for this fragment will include the object's Primary Key ie id in most cases and updated_at timestamp: App\Post/1-98765432101.

The key is that, because we factor the updated_at timestamp into the cache key, whenever you update the given post, the cache key will change. This will then, in effect, bust the cache!

Touching

In order for this technique to work properly, it's vital that we have some mechanism to alert parent relationships (and subsequently bust parent caches) each time a model is updated. Here's a basic workflow:

  1. Model is updated in the database.
  2. Its updated_at timestamp is refreshed, triggering a new cache key for the instance.
  3. The model "touches" (or pings) its parent.
  4. The parent's updated_at timestamp, too, is updated, which busts its associated cache.
  5. Only the affected fragments re-render. All other cached items remain untouched.

Luckily, Laravel offers this "touch" functionality out of the box. Consider a Note object that needs to alert its parent Card relationship each time an update occurs.

Notice the $touches = ['card'] portion. This instructs Laravel to ping the card relationship's timestamps each time the note is updated.

Now, everything is in place. You might render your view, like so:

resources/views/cards/_card.blade.php

resources/views/cards/_note.blade.php

Notice the Russian-Doll style cascading for our caches; that's the key. If any note is updated, its individual cache will clear - long with its parent - but any siblings will remain untouched.

Caching Collections

Its not yet supported but this is already in todo list. Will appreciate any good PR for this. :)

FAQ

1. Is there any way to override the cache key for a model instance?

Yes. Let's say you have:

Behind the scenes, we'll look for a getCacheKey method on the model. Now, as mentioned above, you can use the Enlight\StashView\Traits\Cacheable trait to instantly import this functionality. Alternatively, you may pass your own cache key to the @cache directive, like this:

This instructs the package to use post-pagination for the cache instead. This can be useful for pagination and other related tasks.

That's it. Thank You :)

Happy Coding.


All versions of stash-view with dependencies

PHP Build Version
Package Version
Requires php Version >=7.2
laravel/framework Version >=5.4.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package enlight/stash-view contains the following files

Loading the files please wait ....