|
by via JavaScript Weekly
"Mr Branding" is a blog based on RSS for everything related to website branding and website design, it collects its posts from many sites in order to facilitate the updating to the latest technology.
To suggest any source, please contact me: Taha.baba@consultant.com
|
Lovely subtle device parallax as you start scrolling this clean Landing Page for Lightbridge.
Today, we'll go through the Symfony Routing component, which allows you to set up routing in your PHP applications.
The Symfony Routing Component is a very popular routing component which is adapted by several frameworks and provides a lot of flexibility should you wish to set up routes in your PHP application.
If you've built a custom PHP application and are looking for a feature-rich routing library, the Symfony Routing Component is more than a worth a look. It also allows you to define routes for your application in the YAML format.
Starting with installation and configuration, we'll go through real-world examples to demonstrate a variety of options the component has for route configuration. In this article, you'll learn:
In this section, we're going to install the libraries that are required in order to set up routing in your PHP applications. I assume that you've installed Composer in your system as we'll need it to install the necessary libraries that are available on Packagist.
Once you've installed Composer, go ahead and install the core Routing component using the following command.
$composer require symfony/routing
Although the Routing component itself is sufficient to provide comprehensive routing features in your application, we'll go ahead and install a few other components as well to make our life easier and enrich the existing core routing functionality.
To start with, we'll go ahead and install the HttpFoundation component, which provides an object-oriented wrapper for PHP global variables and response-related functions. It makes sure that you don't need to access global variables like $_GET
, $_POST
and the like directly.
$composer require symfony/http-foundation
Next, if you want to define your application routes in the YAML file instead of the PHP code, it's the YAML component that comes to the rescue as it helps you to convert YAML strings to PHP arrays and vice versa.
$composer require symfony/yaml
Finally, we'll install the Config component, which provides several utility classes to initialize and deal with configuration values defined in the different types of file like YAML, INI, XML, etc. In our case, we'll use it to load routes from the YAML file.
$composer require symfony/config
So that's the installation part, but how are you supposed to use it? In fact, it's just a matter of including the autoload.php file created by Composer in your application, as shown in the following snippet.
<?php require_once './vendor/autoload.php'; // application code ?>
In the previous section, we went through the installation of the necessary routing components. Now, you're ready to set up routing in your PHP application right away.
Let's go ahead and create the basic_routes.php file with the following contents.
<?php require_once './vendor/autoload.php'; use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Exception\ResourceNotFoundException; try { // Init basic route $foo_route = new Route( '/foo', array('controller' => 'FooController') ); // Init route with dynamic placeholders $foo_placeholder_route = new Route( '/foo/{id}', array('controller' => 'FooController', 'method'=>'load'), array('id' => '[0-9]+') ); // Add Route object(s) to RouteCollection object $routes = new RouteCollection(); $routes->add('foo_route', $foo_route); $routes->add('foo_placeholder_route', $foo_placeholder_route); // Init RequestContext object $context = new RequestContext(); $context->fromRequest(Request::createFromGlobals()); // Init UrlMatcher object $matcher = new UrlMatcher($routes, $context); // Find the current route $parameters = $matcher->match($context->getPathInfo()); // How to generate a SEO URL $generator = new UrlGenerator($routes, $context); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, )); echo '<pre>'; print_r($parameters); echo 'Generated URL: ' . $url; exit; } catch (ResourceNotFoundException $e) { echo $e->getMessage(); }
Setting up routing using the Symfony Routing component usually goes through a series of steps as listed below.
Route
object for each of your application routes.Route
objects to the RouteCollection
object.RequestContext
object which holds the current request context information.UrlMatcher
object by passing the RouteCollection
object and the RequestContext
object.Let's go ahead and define a pretty basic foo
route.
$foo_route = new Route( '/foo', array('controller' => 'FooController') );
The first argument of the Route
constructor is the URI path, and the second argument is the array of custom attributes that you want to return when this particular route is matched. Typically, it would be a combination of the controller and method that you would like to call when this route is requested.
Next, let's have a look at the parameterized route.
$foo_placeholder_route = new Route( '/foo/{id}', array('controller' => 'FooController', 'method'=>'load'), array('id' => '[0-9]+') );
The above route can match URIs like foo/1
, foo/123
and similar. Please note that we've restricted the {id}
parameter to numeric values only, and hence it won't match URIs like foo/bar
since the {id}
parameter is provided as a string.
The next step is to add route objects that we've initialized in the previous section to the RouteCollection
object.
$routes = new RouteCollection(); $routes->add('foo_route', $foo_route); $routes->add('foo_placeholder_route', $foo_placeholder_route);
As you can see, it's pretty straightforward as you just need to use the add
method of the RouteCollection
object to add route objects. The first argument of the add
method is the name of the route, and the second argument is the route object itself.
RequestContext
ObjectNext, we need to initialize the RequestContext
object, which holds the current request context information. We'll need this object when we initialize the UrlMatcher
object as we'll go through it in a moment.
$context = new RequestContext(); $context->fromRequest(Request::createFromGlobals());
UrlMatcher
ObjectFinally, we need to initialize the UrlMatcher
object along with routes and context information.
// Init UrlMatcher object $matcher = new UrlMatcher($routes, $context);
Now, we have everything we could match our routes against.
It's the match
method of the UrlMatcher
object which allows you to match any route against a set of predefined routes.
The match
method takes the URI as its first argument and tries to match it against predefined routes. If the route is found, it returns custom attributes associated with that route. On the other hand, it throws the ResourceNotFoundException
exception if there's no route associated with the current URI.
$parameters = $matcher->match($context->getPathInfo());
In our case, we've provided the current URI by fetching it from the $context
object. So, if you're accessing the http://your-domain/basic_routes.php/foo URL, the $context->getPathInfo()
returns foo
, and we've already defined a route for the foo
URI, so it should return us the following.
Array ( [controller] => FooController [_route] => foo_route )
Now, let's go ahead and test the parameterized route by accessing the http://your-domain/basic_routes.php/foo/123 URL.
Array ( [controller] => FooController [method] => load [id] => 123 [_route] => foo_placeholder_route )
It worked if you can see that the id
parameter is bound with the appropriate value 123
.
Next, let's try to access a non-existent route like http://your-domain/basic_routes.php/unknown-route, and you should see the following message.
No routes found for "/unknown-route".
So that's how you can find routes using the match
method.
Apart from this, you could also use the Routing
component to generate links in your application. Provided RouteCollection
and RequestContext
objects, the UrlGenerator
allows you to build links for specific routes.
$generator = new UrlGenerator($routes, $context); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, ));
The first argument of the generate
method is the route name, and the second argument is the array that may contain parameters if it's the parameterized route. The above code should generate the /basic_routes.php/foo/123 URL.
In the previous section, we built our custom routes using the Route
and RouteCollection
objects. In fact, the Routing
component offers different ways you could choose from to instantiate routes. You could choose from various loaders like YamlFileLoader
, XmlFileLoader
, and PhpFileLoader
.
In this section, we'll go through the YamlFileLoader
loader to see how to load routes from the YAML file.
Go ahead and create the routes.yaml file with the following contents.
foo_route: path: /foo defaults: { controller: 'FooController::indexAction' } foo_placeholder_route: path: /foo/{id} defaults: { controller: 'FooController::loadAction' } requirements: id: '[0-9]+'
Next, go ahead and make the load_routes_from_yaml.php file with the following contents.
<?php require_once './vendor/autoload.php'; use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Config\FileLocator; use Symfony\Component\Routing\Loader\YamlFileLoader; use Symfony\Component\Routing\Exception\ResourceNotFoundException; try { // Load routes from the yaml file $fileLocator = new FileLocator(array(__DIR__)); $loader = new YamlFileLoader($fileLocator); $routes = $loader->load('routes.yaml'); // Init RequestContext object $context = new RequestContext(); $context->fromRequest(Request::createFromGlobals()); // Init UrlMatcher object $matcher = new UrlMatcher($routes, $context); // Find the current route $parameters = $matcher->match($context->getPathInfo()); // How to generate a SEO URL $generator = new UrlGenerator($routes, $context); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, )); echo '<pre>'; print_r($parameters); echo 'Generated URL: ' . $url; exit; } catch (ResourceNotFoundException $e) { echo $e->getMessage(); }
The only thing that's different in this case is the way we initialize routes!
$fileLocator = new FileLocator(array(__DIR__)); $loader = new YamlFileLoader($fileLocator); $routes = $loader->load('routes.yaml');
We've used the YamlFileLoader
loader to load routes from the routes.yaml file instead of initializing it directly in the PHP itself. Apart from that, everything is the same and should produce the same results as that of the basic_routes.php file.
Lastly in this section, we'll go through the Router
class, which allows you to set up routing quickly with fewer lines of code.
Go ahead and make the all_in_one_router.php file with the following contents.
<?php require_once './vendor/autoload.php'; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\Router; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Config\FileLocator; use Symfony\Component\Routing\Loader\YamlFileLoader; use Symfony\Component\Routing\Exception\ResourceNotFoundException; try { $fileLocator = new FileLocator(array(__DIR__)); $requestContext = new RequestContext(); $requestContext->fromRequest(Request::createFromGlobals()); $router = new Router( new YamlFileLoader($fileLocator), 'routes.yaml', array('cache_dir' => __DIR__.'/cache'), $requestContext ); // Find the current route $parameters = $router->match($requestContext->getPathInfo()); // How to generate a SEO URL $routes = $router->getRouteCollection(); $generator = new UrlGenerator($routes, $requestContext); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, )); echo '<pre>'; print_r($parameters); echo 'Generated URL: ' . $url; exit; } catch (ResourceNotFoundException $e) { echo $e->getMessage(); }
Everything is pretty much the same, except that we've instantiated the Router
object along with the necessary dependencies.
$router = new Router( new YamlFileLoader($fileLocator), 'routes.yaml', array('cache_dir' => __DIR__.'/cache'), $requestContext );
With that in place, you can straight away use the match
method of the Router object for route mapping.
$parameters = $router->match($requestContext->getPathInfo());
Also, you will need to use the getRouteCollection
method of the Router object to fetch routes.
$routes = $router->getRouteCollection();
Go ahead and explore the other options available in the Routing component—I would love to hear your thoughts!
Today, we explored the Symfony Routing component, which makes implementation of routing in PHP applications a breeze. Along the way, we created a handful of examples to demonstrate various aspects of the Routing component.
I hope that you've enjoyed this article, and feel free to post your thoughts using the feed below!
Dailychart.js is a tiny standalone SVG charting library to display daily graph of a stock market security.
The post Dailychart.js : SVG Charting library appeared first on Best jQuery.
Tobi is a simple lightbox script without dependencies.
Features:
The post Tobi : Simple Lightbox script without Dependencies appeared first on Best jQuery.
When we’re hard at work in the final stages of our new product or service launch, we overlook how effective a well-planned marketing campaign can be.
Word-of-mouth after launching is still worth it’s weight in gold and can be achieved with a beautiful pre-launch teaser followed by the reveal of a quality product or service.
In this tutorial I’m going to show you how to tease your upcoming product or service with a beautiful Squarespace Launching Soon page. This website will also gather email addresses for the final launch announcement sent using Squarespace Email Marketing Tools.
[pixel tag here]
Yay! Squarespace has been kind enough to give One Page Love readers the exclusive coupon OPL10 for 10% Off your first website or domain purchase. (There is a free 14-day trial with no credit card needed, so you can try risk free.)
Squarespace has become an All-In-One platform for small businesses. Their newest feature allows anyone to gather email addresses within their website and then send marketing emails using the same Squarespace platform. Right now existing Squarespace customers can use Email Campaigns at no cost for a limited time during an invite-only early access period. General availability at a low monthly rate is coming soon but noteworthy highlights include:
My favorite feature is definitely how the click tracking is part of a bigger analytics platform. We can track a click from an email button all the way to the purchase page, meaning we can see how much our Email Marketing Campaigns are converting into sales.
In this quick tutorial we are going to setup a Squarespace Cover Page to tease our product while encouraging a Newsletter Signup for the launch announcement:
Step One: Open up the Squarespace editor (if this is a new website setup, simply choose any template to begin).
Step Two: In the Main Navigation, click Pages, then click the + icon and select Cover Page:
Step Three: Choose a Cover Page layout you love, I’ve chose the minimal “Landing – Cover” layout to tease an ingredient for our demo Juice and Snack product:
Step Four: Add your branding, text and media.
Step Five: Open up Action area of the Cover Page:
Step Six: Select Submission Type as Newsletter Signup:
Step Seven: Click the Edit Newsletter Signup button and connect the new list to your Google Drive or to your new Email Campaigns feature if your Squarespace account has access.
Step Eight: Style the page if needed.
Step Nine: To set the Cover Page as the first page visitors see at your domain, set it as your Home Page.
Now you should have a great looking teaser Launching Soon page to announce and start gathering emails leading up to the big launch day:
Squarespace is a leading online website builder. What sets them apart from the rest is their superior level of design and customer support. They have a huge support team and are available 24/7. Other main benefits are:
I hope enjoyed this tutorial on how to create a stunning Launching Soon website integrated with the Email Marketing Campaigns functionality for your launch. Props to Squarespace for creating a platform where we can create beautiful announcement websites, easily. If you missed it I wrote a tutorial last month on the Top 5 Squarespace Photography Templates.