Introducing ReUI:Open-source UI components and apps built with React, Next.js and Tailwind CSS
Browse ReUI

Separate frontend and backend


Anyone can help me to separate frontend and backend routes in Metronic laravel version?
Thanks !


Text formatting options
Submit
Here's a how to add some HTML formatting to your comment:
  • <pre></pre> for JS codes block
  • <pre lang="html"></pre> for HTML code block
  • <pre lang="scss"></pre> for SCSS code block
  • <pre lang="php"></pre> for PHP code block
  • <code></code> for single line of code
  • <strong></strong> to make things bold
  • <em></em> to emphasize
  • <ul><li></li></ul>  to make list
  • <ol><li></li></ol>  to make ordered list
  • <h3></h3> to make headings
  • <a></a> for links
  • <img> to paste in an image
  • <blockquote></blockquote> to quote somebody
  • happy  :)
  • shocked  :|
  • sad  :(

Replies (7)


I tried your version but for now not working. I will try to search for another method.



under routes/frontend create an auth.php file and add:


<?php

Route::group(["middleware" => "guest"], function () {
// Authentication
Route::get("login", [LoginController::class, "showLoginForm"])->name("login");
Route::post("login", [LoginController::class, "login"])->name("login.post");
});


then under routes/backend create an admin.php file and add for example:


<?php

Route::redirect("/", "/admin/dashboard", 301)->name("redirect");


that way you have your routes separated by frontend and backend happy



The way i manage separation for frontend and backend routes is as follows:

create a helper:


if (! function_exists("includeFilesInFolder")) {
/**
* Loops through a folder and requires all PHP files
* Searches sub-directories as well.
*
* @param $folder
*/
function includeFilesInFolder($folder)
{
try {
$rdi = new RecursiveDirectoryIterator($folder);
$it = new RecursiveIteratorIterator($rdi);

while ($it->valid()) {
if (! $it->isDot() && $it->isFile() && $it->isReadable() && $it->current()->getExtension() === "php") {
require $it->key();
}

$it->next();
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}

if (! function_exists("includeRouteFiles")) {

/**
* @param $folder
*/
function includeRouteFiles($folder)
{
includeFilesInFolder($folder);
}
}


then on routes/web.php:


/*
* Frontend Routes
*/
Route::name("frontend.")->group(function () {
includeRouteFiles(__DIR__."/frontend/");
});

/*
* Backend Routes
*/
Route::prefix("admin")->name("admin.")->middleware("auth")->group(function () {
includeRouteFiles(__DIR__."/backend/");
});


then under routes folder create the two folders (frontend and backend) and just create your route files in there, for example:

under routes/frontend create an auth.php file and add:


<?php

Route::group(["middleware" => "guest"], function () {
// Authentication
Route::get("login", [LoginController::class, "showLoginForm"])->name("login");
Route::post("login", [LoginController::class, "login"])->name("login.post");
});


then under routes/backend create an admin.php file and add for example:


<?php

Route::redirect("/", "/admin/dashboard", 301)->name("redirect");


that way you have your routes separated by frontend and backend happy



Thank you Carlos and appreciate your efforts. Hope this can help others as well happy

Thanks



Great.
I will try this
Thank you !



Hi,

You have to customize it. At the moment, Metronic does not have an example for it.

You could also split your admin routes into a separate file, and require that file in your app/routes.php file. With separate route for / and /admin.

Thanks



I tried to customize it, but when i change routes files and get back to initial code:

// Route::get('/', function () {
// return redirect('index');
// });

But when i try this, authentication and menu doesn't work anymore.

I don't know how to handle this:
$menu = theme()->getMenu();
array_walk($menu, function ($val) {
if (isset($val['path'])) {
$route = Route::get($val['path'], [PagesController::class, 'index']);

// Exclude documentation from auth middleware
if (!Str::contains($val['path'], 'documentation')) {
$route->middleware('auth');
}

// Custom page demo for 500 server error
if (Str::contains($val['path'], 'error-500')) {
Route::get($val['path'], function () {
abort(500, 'Something went wrong! Please try again later.');
});
}
}
});

I know how to do this with initial laravel files, but metronic was customized in another way.

Thanks !


Text formatting options
Submit
Here's a how to add some HTML formatting to your comment:
  • <pre></pre> for JS codes block
  • <pre lang="html"></pre> for HTML code block
  • <pre lang="scss"></pre> for SCSS code block
  • <pre lang="php"></pre> for PHP code block
  • <code></code> for single line of code
  • <strong></strong> to make things bold
  • <em></em> to emphasize
  • <ul><li></li></ul>  to make list
  • <ol><li></li></ol>  to make ordered list
  • <h3></h3> to make headings
  • <a></a> for links
  • <img> to paste in an image
  • <blockquote></blockquote> to quote somebody
  • happy  :)
  • shocked  :|
  • sad  :(
Text formatting options
Submit
Here's a how to add some HTML formatting to your comment:
  • <pre></pre> for JS codes block
  • <pre lang="html"></pre> for HTML code block
  • <pre lang="scss"></pre> for SCSS code block
  • <pre lang="php"></pre> for PHP code block
  • <code></code> for single line of code
  • <strong></strong> to make things bold
  • <em></em> to emphasize
  • <ul><li></li></ul>  to make list
  • <ol><li></li></ol>  to make ordered list
  • <h3></h3> to make headings
  • <a></a> for links
  • <img> to paste in an image
  • <blockquote></blockquote> to quote somebody
  • happy  :)
  • shocked  :|
  • sad  :(