Debug School

rakesh kumar
rakesh kumar

Posted on

Laravel url generation

guide-to-generate-url-in-laravel
laravel-url-generation

Laravel URL Generation

Routes URLs
URL::current(): It returns the current URL. consider the following example.

Route::get('test/route',function(){
   return URL::current();
});
Enter fullscreen mode Exit fullscreen mode

outputs

http://<laravel dir>/public/test/route
Enter fullscreen mode Exit fullscreen mode

URL::full(): It returns the current URL with request data as GET parameters. It differs from URL::current() as URL::current() strips off request data.

Route::get('test/route',function(){
   return URL::full();
});
Enter fullscreen mode Exit fullscreen mode
visit http://<laravel dir>/public/test/route?foo=1&bar=3
Enter fullscreen mode Exit fullscreen mode

outputs

http://<laravel dir>/public/test/route?bar=3&foo=1
Enter fullscreen mode Exit fullscreen mode

URL::previous(): It returns the URL of the previous request. Consider the following example.

Route::get('first_test/route',function(){
   return Redirect::to('second_test/route');
});
Route::get('second_test/route',function(){
   return URL::previous();
});
Enter fullscreen mode Exit fullscreen mode

visit http:///public/first_test/route
outputs

http://<laravel dir>/public
Enter fullscreen mode Exit fullscreen mode

As you can see, the first route redirects to the second route. Then the second route returns the previous request URL (referer).

URL::to(): It returns the URL of specific route passed as parameter. You should note that this method doesn’t verify if the route exists or not.

Route::get('test/route',function(){
   return URL::to('another/route');
});
Enter fullscreen mode Exit fullscreen mode

** outputs**

http://<laravel dir>/public/another/route
Enter fullscreen mode Exit fullscreen mode

You can provide additional parameters to URL in the form of an array. The parameters will be inserted at the end of the route.

Route::get('test/route',function(){
   return URL::to('another/route', array('foo','2','bar','8'));
});
Enter fullscreen mode Exit fullscreen mode

** outputs**

http://<laravel dir>/public/another/route/foo/2/bar/8
Enter fullscreen mode Exit fullscreen mode

URL::secure(): It returns the URL to route which uses HTTPS protocol. It accepts two parameters. The first parameter is the route and the second parameter is an optional array of parameters to append at the end of the URL.

Route::get('test/route',function(){
   return URL::secure('another/route', array());
});
Enter fullscreen mode Exit fullscreen mode

outputs
https:///public/another/route
It is worth noting that URL::to() can be used to generate URLs using HTTPS protocol by passing true as third parameter like that.

Route::get('test/route',function(){
   return URL::to('another/route', array(),true);
});
Enter fullscreen mode Exit fullscreen mode

outputs

https://<laravel dir>/public/another/route
Enter fullscreen mode Exit fullscreen mode

URL::route(): It returns the URL of routes using their nicknames. It accepts two parameters. The first parameter is a string representing route nickname and the second parameter is an optional array of parameters to append at the end of the URL. Let’s take a look at this in action.

Route::get('test/route',array( 'as' => 'test_route',
 function(){
   return;
 }));
Route::get('another/route',function(){
   return URL::route('test_route', array());
});
Enter fullscreen mode Exit fullscreen mode

visit

http://<laravel dir>/public/another/route
Enter fullscreen mode Exit fullscreen mode

** outputs**

http://<laravel dir>/public/test/route
Enter fullscreen mode Exit fullscreen mode

URL::action(): It returns the URL of controller action. It accepts two parameters. The first parameter is a controller action and the second parameter is an optional array of parameters to append at the end of the URL. Consider the following example.

class BlogUsers extends BaseController
{
 public function AddUser(){

 }
}

Route::get('users/add','AddUser@BlogUsers');
Route::get('users/test',function(){
   return URL::action('AddUser@BlogUsers', array());
});
Enter fullscreen mode Exit fullscreen mode

In this example, We created a new controller called BlogUsers with method AddUser. We attach users/add route to controller action. We created a new route which returns the URL of controller action so when you visit /users/test URL, You should receive the following.

http:///public/users/add
As i said before, This function accepts an optional array of parameters to append at the end of the URL. Let’s see this in action.

/* ... */

Route::get('users/test',function(){
   return URL::action('AddUser@BlogUsers', array('foo'=>8,'bar'=>9));
});
Enter fullscreen mode Exit fullscreen mode

When you visit /users/test URL, Laravel returns the URL with parameters like this.

http://localhost/laravel/public/users/add?foo=8&bar=9
Assets URLs
URLs to assets such as css files, javascript files and images need to be absolute URLs so Let’s take a look at some of the methods used to get assets URLs:

URL::asset(): It returns the absolute URL to asset. It accepts two parameters. The first parameter is the relative path to the asset from laravel root and the second parameter is a boolean value representing whether URL is secure or not.

Route::get('asset', function(){
 return URL::asset('/app/public/assets/css/main.css');
});
Enter fullscreen mode Exit fullscreen mode

visit

http://<laravel dir>/public/asset
Enter fullscreen mode Exit fullscreen mode

outputs

http://<laravel dir>/public/app/public/assets/css/main.css
Enter fullscreen mode Exit fullscreen mode
Route::get('secured_asset', function(){
 return URL::asset('/app/public/assets/css/main.css',true);
});
Enter fullscreen mode Exit fullscreen mode

//visit
//http:///public/secured_asset

outputs
Enter fullscreen mode Exit fullscreen mode
https://<laravel dir>/public/app/public/assets/css/main.css
Enter fullscreen mode Exit fullscreen mode

URLs Generators Shortcuts

All methods discussed before are available to be used in views. However it is good practice to use URL generators shortcuts in your views to make them short and neat.

url(): It is identical to URL::to() method. consider the following example.

app/routes.php
Enter fullscreen mode Exit fullscreen mode
Route::get('another/route', function(){
 return View::make('test');
});
Enter fullscreen mode Exit fullscreen mode

//app/views/test.blade.php

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>
     Laravel
  </title>
 </head>
 <body>
  <div class="welcome">
   <p>{{ url('another/route') }}</p>
  </div>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

When you visit /public/another/route, you should get the following output.

http://<laravel dir>/public/another/route
Enter fullscreen mode Exit fullscreen mode

secure_url(): It returns secured URL to the route. It accepts the same parameters as URL::secure(). Consider the following example.

<div class="welcome">
 <p>{{ secure_url('another/route') }}</p>
</div>
Enter fullscreen mode Exit fullscreen mode

route(): It is a shortcut to the URL::route() method. It accepts the nickname of the route and returns the URL.

<div class="welcome">
  <p>{{ route('route_nickname') }}</p>
</div>
Enter fullscreen mode Exit fullscreen mode

action(): It is a shortcut to the URL::action() method. It generates links to controller actions.

<div class="welcome">
 <p>{{ action('method_name@controller_name') }}</p>
</div>
Enter fullscreen mode Exit fullscreen mode

asset(): It is a shortcut to the URL::asset() method. It accepts identical parameters. Consider the following example.

<div class="welcome">
 <p>{{ asset('/app/public/assets/css/main.css') }}</p>
</div>
Enter fullscreen mode Exit fullscreen mode

secure_asset(): It is similar to asset() except that it returns secured URL. You can use asset() function to return secured URLs by passing true as second parameter.

<div class="welcome">
 <p>{{ secure_asset('/app/public/assets/css/main.css') }}</p>
</div>
<div class="welcome">
 <p>{{ asset('/app/public/assets/css/main.css', true) }}</p>
</div>
Enter fullscreen mode Exit fullscreen mode

Top comments (0)