How to include separate directories into one project? - php

I have a folder outside the document root named Base and a folder inside the document root to display HTML pages.
I originally had them separate projects but that's not the ideal situation obviously?
I saw one suggestion to make the directory which holds Base the project root and to exclude everything except the two directories I need. This works but is this the only way to do it?

Settings (Preferences on Mac) | Project | Directories | Add Content Root
This allows you to make any folder as part of the project (will be listed in Project View panel as separate branch).

Related

How to stop PhpStorm from indexing my `excluded` directory?

Within PhpStorm 2018.1.6 I've got a directory x which I have excluded using Settings | Directories -> Exclude directory x. PhpStorm takes care of most of the directories which I have excluded but not this one. While I am editing/creating PHP tests PhpStorm constantly is busy with indexing this directory.
Directory x is part of an imported project.
Is there any reason which PhpStorm can have to exclude an excluded directory and indexes it as well? The indexing process takes forever.
Things to try (from Jetbrain team):
Remove "Add packages as libraries" checkbox at Preferences |
Languages & Frameworks | PHP | Composer (click Ok to save).
Check that you don't have those excluded directories added as include path at Preferences | Languages & Frameworks | PHP afterward.
Test by rebuilding cache File | Invalidate Caches / Restart...
I encountered this problem when I had the root project path listed in the include path and filed it as a bug and they suggested these things.

Deploy Laravel project on subfolder

I'm trying to deploy my Laravel 5.5 project on my web hosting ( PHP version 7.1.xx ).
I have multiple hosting on the same server so when I connect using FTP that what I have:
-WEBSITE NUMBER 1
-- WordPress files
-WEBSITE NUMBER 2
-- WordPress files
-WEBSITE NUMBER 3
-- WordPress files
Now what I want is a subfolder of www.WEBSITENUMBER3.com/app/ running laravel.
So I did 2 folders at the same level:
-WEBSITE NUMBER 1
-- WordPress files
-WEBSITE NUMBER 2
-- WordPress files
-WEBSITE NUMBER 3
-- WordPress files
-- app
-- laravelApp
Inside of app folder I put the files of the Public directory of Laravel, and in the laravelApp folder I put all my laravel project ( except public folder )
Now the problem is that when I visit www.WEBSITENUMBER3.com/app/ all the links are broken, bootstrap doesn't get load because he tries to load :
www.WEBSITENUMBER3.com/bootstrap
instead of www.WEBSITENUMBER3.com/app/bootstrap
so all the things of my Application.
So is there a way to change the root where laravel works?
I found impossible and wrong change all links in Laravel manually to make them absolutely I want to keep them relative.
You should set the right path four your app in the .env file, in the root folder.
The APP_URL line should be set like this:
APP_URL=www.WEBSITENUMBER3.com/app/
After changing the .env, you need to restart the webserver. The additional steps depend on your webserver.

CakePHP 2.4.1 $this->webroot gives / and not /app/webroot

I've inherited a CakePHP 2.4.1 project and I don't want to use all the html, css, script helpers as it is make the app more dependent on CakePHP if we ever wanted to change frameworks, but when I try to load scripts, styles, images using
<?php echo $this->webroot; ?>css/app.min.css
but that produces a URL of
http://example.com/app.min.css
$this->webroot just returns /, I'm not very familiar with CakePHP yet. Is there a configuration setting or something that is set that is changing this? My vhosts file is pointed at webroot.
The "Webroot" is the directory that is accessible to the public. It contains all of your asset elements, etc, it should look like:
-- webroot
| -- assets
| -- css
| -- js
| -- img
| -- index.php
//etc
So when you run $this->webroot you are getting the path to your public directory. This assumes that all asset files will reside in this directory.
In the event that this has been modified, simply open up the index.php of your application and find this line:
define('WEBROOT_DIR', 'MY_WEBROOT_DIR');
And change MY_WEBROOT_DIR to the actual name of your public directory as it resides within your CakePHP Application

Copying Assets to Web root folder instead of Web/Bundles

I have Symfony project in which i want to copy images to web folder. So I used bellow command.
php app/console assets:install web
It copy all images to Web/bundles/framework. I want all images in Web root folder.
Please suggest me how can i change the path to store all images or assets to root folder of web instead of storing in bundles.
You cannot do that, because the default bundles/ directory is hardcoded in the source code:
Symfony\Bundle\FrameworkBundle\Command\AssetsInstallCommand - Line 83
$bundlesDir = $targetArg.'/bundles/';
So I suggest either sticking to that convention or submitting a PR to the Symfony core repository to parametrize this directory.

What is the most scalable PHP-based directory structure for a large site?

I am creating a very large PHP MVC-based site that will have a large library of php classes, javascripts, and many css files (not to mention a large amount of files for the MVC).
For the first time ever, I am actually taking the time to plan out a clean and organized directory structure.
What directory structures do you typically use, and which will be easiest to manuever when there are thousands of files?
This is my setup. It's worked great for me for small - very large projects (including a social network).
These folders would all live within my main application folder:
config - contains custom PHP config files
css - contains the project's CSS files
helpers - contains 'helper' files (each file is a collection of functions)
images - contains the project's images
js - contains the project's Javascript files
lib - contains PHP classes specific to the project
modules - My MVC framework allows packaging site sections as modules
blog - An example module
controllers - contains the controllers for the module
models - contains the models for the module
views - contains the views for the module
views - contains views that should be globally accessible (page header, footer, etc)
All the directories could obviously contain sub-folders that would further organize your files. For example, the 'css' folder could have sub-folders named 'web' and 'mobile'. The 'images' folder could contain a 'user_uploaded' folder which could then contain`'profile'. And of course you can add folders as you see fit, in one project I have a folder called 'uploaders' which just contains stand-alone upload scripts.
I also use convenience methods which help construct the filenames of what I want to load. For example, my loadView() will look for the view file in the current module directory, or if you pass an optional $module argument, it will look specifically within that module's folder.
I hope this helps.
You should have one directory as web root, where only files you want exposed to the whole internet should reside.
project/
web/
index.php
css/
js/
images/
config/
lib/
web/ is the root shown to visitors
lib/ is here the library folder, and where autoload look for files.
You can add more subfolders to project/ like controller, modules, view, helper, etc. This depends on your framework.
EDIT:
If you use composer (which I recommend) and maybe npm with grunt and less your file structure would be the following:
project/
web/
js/
css/
images/
index.php
cli/
config/
config.php
node_modules/
src/
test/
vendor/
composer.json
composer.lock
packages.json
web/ has all your public files
cli/ scripts and programs to be run from command line NOT the web
config/ has all your config files (in git you ignore config.php and instead have config.dist.php without usernames, passwords, validation codes and table prefixes/suffixes and other "secrets")
node_modules/ has all your library files from npm (in git I suggest you put this in a submodule)
src has all your local PHP files in psr4 structure, set up to autoload in composer.json
test/ has all your unit tests for your src classes, set up in autload-dev in composer.json (remember to use composer install --no-dev on live, maybe add -o if you don't have too many classes)
vendor has all your library files from composer and the ONE AND ONLY autoload.php to be included in web/index.php and any cli scripts (in git I suggest you ignore this vendor folder)
Add other folders and files as required for your project.
For deployment use this structure:
/sites/project/ (project is your projectname)
current (alias to current release folder releases/v1.1.0)
previous (optional alias to previous release folder releases/v1.0.1)
releases/
v1.0.0/ (git checkout of tag v1.0.0)
v1.0.1/ (git checkout of tag v1.0.1)
v1.1.0/ (git checkout of tag v1.1.0)
shared/ (has all your shared files and folders to be aliased in all releases - maybe something like GlusterFS)
Make a deployment script. Something like this:
First take backup of db or to copy it to a new database, checkout git repo to new folder with release tag, get all git submodules, run composer install --no-dev, setup any aliases for shared folders and files like uploaded images and configuration files, generate js/css with grunt and less or equivalent, point current alias to the new folder with the tag, run update database script, restart nginx/apache/fpm-php services, run tests to check the website is up.
Have a script to go back to previous version (or a guide so you know what to do).
For core files which are included:
approot/inc/
For data access functions and classes are in:
approot/dao/
For javascripts:
approot/scripts/
For CSS:
approot/styles/
For images:
approot/img/
For static content (normally for user profile pictures or uploaded images):
approot/static/
For caches:
approot/caches/
For templates or View files:
approot/templates/
All pages file:
approot/
Structure from Samstyle PHP Framework
The answer I posted here was from 2009. Over the years more standards were published, including PSR-0 which covers the topic on folder structure. I also have a new (and I feel that it's better) folder structure with Packfire Framework.
In my experience, you can never plan for this. You can try to follow what frameworks do, but I find I never quite fit exactly into their mold.
I recommend to just keep a good rule of thumb for 20 files in a directory maximum. If you find you need more, just create a few sub directories and move common components in there.
This is mostly a matter of preference, a quick Google search would reveal many different project structures. But it would be really nice if there were an agreed upon standard. I think this initiative by the PHP Package Development Standards is a good candidate.
This is the directory structure they propose:
bin/: command-line executables
config/: configuration files
docs/: documentation files
public/: web server files
resources/: other resource files
src/: PHP source code
tests/: test code
EDIT:
This is also mentioned in the PHP The Right Way under the section Common Directory structure.
I use codeigniter for small and big projects.
It's MVC feature is moderately good.
codeIgniter\system\application\config : contain all kind of configuration files like DB,Payment gateway, ftp config, routes and ...
codeIgniter\system\application\models: contain all kinds of database classes, you should create sub folders according to your need, I used customers, mailData, paymentModel, report, web-service and ....
codeIgniter\system\application\views: contain all kinds of files that will work as output for clients, you should think of reuse these files if possible. Like the models you had to create sub folder like administration, reports, email, email_template .....
codeIgniter\system\application\controllers : this is the most important part. This will help to create SEO url, so you should be more careful about sub folders this time. You can create like administration, products, reports, orders..... and consider a good name for the functions of the controller class.
These were for the PHP/HTML file.
Now about the other files:
codeIgniter\images: for the images
codeIgniter\scripts: for the Java scripts and their framework
codeIgniter\styles: for the CSS
codeIgniter\uploads: for the uploaded files, if you don't want to put files in the DB
For the detail see codeIgniter framework in detail.
Here "codeIgniter\" is the approot
This is the structure i'm using currently,
public/
assets/ /* js, css, imgs, ... */
index.php
src/
config/ /* for config files */
helpers/ /* for functions */
libraries/ /* for free classes that are not MVC classes */
models/ /* for M in MVC */
views/ /* for V in MVC */
controllers/ /* for C in MVC */
vendor/ /* for vendors files */
uploads/ /* for uploaded images, docs, ... */
Have a look at symfony 1.4 or symfony 2 dir structure. Choose what's most intuitive to you.
I believe this depends on how large the project will become. This is what I used mostly:
project/
index.php
img/
css/
js/
views/
functions/
As long as all the project files are organised...
Even though the question is abit old, I still think it is wise to suggest the latest scaleable application structure which I have been working in my SOA based application and working absolutely fine.
myApplication/
app/
config/
+ this can include custom MVC structure
cli/
docker/
lib/ - most commonly reusable components
logs/
public/ - should contain all publicly exposable web contains
sql/ - db migration stuffs
tests/ - compulsory test
tools/ - application addon tools like any kinds of rulset etc
vendor/

Categories