SolarPHP on Mosso

I use mosso for this site as well as a couple others and recently I wanted to use SolarPHP for one of them. Solar uses some symlinks near the base to reach deeper into the directory structure of Solar and your app to make things a little easier. Since mosso doesn't support symlinks I had to tweak Solar a bit. Here is what I did.

copy the main solar directories to web/ except for the docroot directory.

put solar/docroot contents in web/content

modify the .htaccess file in the web/content directory and add RewriteBase /  (needed for mod-rewrite with mosso)

make sure to chmod 777 -R on web/sqlite and web/tmp

in web/content/index.php change

set_include_path("$system/include");

TO

set_include_path($system);

AND

require_once "Solar.php";

TO

require_once "$system/source/solar/Solar.php";

change web/source/solar/Solar/Class/Stack.php _run() method from

include func_get_arg(0);

TO

$file = Solar_File::exists(func_get_arg(0));:br:include $file;

in web/source/solar/Solar/Path/Stack.php find() method

add

$spec = Solar_File::exists($spec);

BEFORE

return $spec;

In web/source/solar/Solar/File exists() method

add

if ($file[0] !== '/') {:br:    $first = strtolower(substr($file, 0, strpos($file, '/')));:br:    $file = 'source' . DIRECTORY_SEPARATOR . $first . DIRECTORY_SEPARATOR .  $file;:br:} else {
    $file = str_ireplace(Solar_Config::get('Solar', 'system') . '/source/', 'source/', $file);:br:}:br:


AFTER


// no file requested?:br:$file = trim($file);:br:if (! $file) {:br:    return false;:br:}:br:

Then for web/content/public instead of having the Solar and/or whatever
your vendor name is be a symlink to web/source/solar/Solar/App/Public

delete it and create a folder named Solar (or whatever your vendor name is) and put your images, scripts, etc folders within it.

That's it. You should now have a working Solar setup in mosso.