I want to load views from two different folders. 1. views (for desktop) 2. mobile (for mobile devices) The view files will be in same name. If run from mobile and the required file is not in mobile folder, the file from view folder will be loaded. The application is divided into different modules with separate views, controllers and route file. I have done the condition in the moduleServiceProvider.php in module folder:
<?php namespace App\Modules;
class ModuleServiceProvider extends \Illuminate\Support\ServiceProvider
{
public function boot()
{
$useragent=$_SERVER['HTTP_USER_AGENT'];
$modules = config("module.modules");
while (list(,$module) = each($modules)) {
if(file_exists(__DIR__.'/'.$module.'/routes.php'))
{
include __DIR__.'/'.$module.'/routes.php';
}
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',$useragent))
{
if(is_dir(__DIR__.'/'.$module.'/mobile'))
{
$this->loadViewsFrom(__DIR__.'/'.$module.'/mobile', $module);
}
else
{
if(is_dir(__DIR__.'/'.$module.'/Views'))
{
$this->loadViewsFrom(__DIR__.'/'.$module.'/Views', $module);
}
}
}
else if(is_dir(__DIR__.'/'.$module.'/Views'))
{
$this->loadViewsFrom(__DIR__.'/'.$module.'/Views', $module);
}
}
}
}
But right now, if there is three pages in view folder and only one or two pages with the same name in the mobile folder those pages load perfectly in the mobile device. But the third page (which is only in view folder, but not in mobile folder) doesn't load in mobile device. Because the app finds the mobile directory, but fails to find the page. It doesn't load the page from the view folder. It would be great if anyone could help me without doing anything in the controller or route file. Thanks. Folder Structure:
app
core
config
.
.
.
modules
module1
controllers
controllerA.php
controllerB.php
controllerC.php
forms
views
viewA.blade.php
viewB.blade.php
viewC.blade.php
mobile
viewA.blade.php
viewC.blade.php
route.php
module2
controllers
forms
views
mobile
module3
module4
moduleServiceProvider.php
facades
public
resources
.
.
.
you can use https://matthewdaly.co.uk/blog/2018/04/22/rendering-different-views-for-mobile-and-desktop-clients-in-laravel/.it helps you to detect mobile and use https://github.com/Torann/device-view, it will help you to dynamically select between views.