#!/bin/bash # THE PURPOSE OF THIS SCRIPT IS TO RUN THIS BASH SCRIPT IN A LARAVEL PROJECT AND IT WILL ADD THE APPROPRIATE REQUIRED PAGES. # TO RUN SCRIPT: #rm -f Laravel-AddNewpage-api.sh #curl -o ./Laravel-AddNewpage-api.sh https://www.webune.com/forums/Laravel-AddNewpage-api.sh.html #chmod +x Laravel-AddNewpage-api.sh #./Laravel-AddNewpage-api.sh # touch Laravel-AddNewpage-api.sh ; chmod a+x Laravel-AddNewpage-api.sh ; code Laravel-AddNewpage-api.sh ########## ENTER INPUT START ######## #EXAMPLE 1 - Creates a page and a new controller (AdminController) http://localhost/admin/ in the 15T Windows XAMPP PC #1 Platform = 1 #2 Page Name = index #3 Folder Name = admin #4 Route = /admin #5 Route Type = 1 (get) #6 Controller Name = AdminController # RESULTS: #1 = For the 15T Windows XAMPP PC #2,3 = Creates file: admin/index.blade.php #4 = Creates a route in api.php as '/admin' #5 = Sets the CRUD type to 'get' #6 = Check if AdminController exists, if not, generates to app/Http/Controllers/AdminController.php # URL= http://localhost:8000/admin or http://localhost/admin #EXAMPLE 2 - Creates a page to existing controller (AdminController) following: #1 Platform = 1 #2 Page Name = todo #3 Folder Name = admin #4 Route = /admin/todo #5 Route Type = 1 (get) #6 Controller Name = AdminController # RESULTS: #1 = For the 15T Windows XAMPP PC #2,3 = Creates file: admin/todo.blade.php #4 = Creates a route in api.php as '/admin/todo' #5 = Sets the CRUD type to 'get' #6 = Check if AdminController exists, if not, generates to app/Http/Controllers/ # URL= http://localhost:8000/admin/todo # 1 PS3='1. Select your planform (1): ' APP_PLATFORMS=("php" "sail") select APP_PLATFORM in "${APP_PLATFORMS[@]}"; do case $APP_PLATFORM in "php") APP_ROUTE_NAME=$APP_PLATFORM break ;; "sail") APP_ROUTE_NAME=$APP_PLATFORM break ;; *) echo "invalid option $REPLY";; esac done echo "#22 APP_PLATFORM = $APP_PLATFORM" echo "EXAMPLE: Route::post('/home', [AuthController::class, 'index']); " #2 ROUTE while [[ $APP_ROUTE == "" ]] do read -p "4. Enter the Route (/home): NOTE Common Resource Routes: index, create, store, show, edit, update, destroy " APP_ROUTE set -e done echo "#49 APP_ROUTE = $APP_ROUTE" # 3 ROUTER METHOD TYPE #https://laravel.com/docs/9.x/routing#available-router-methods PS3='5. Select the route Type (1): ' APP_ROUTE_NAMES=("get" "post" "patch" "delete" "options") select ROUTER_METHOD in "${APP_ROUTE_NAMES[@]}"; do case $ROUTER_METHOD in "get") APP_ROUTE_NAME=$ROUTER_METHOD break ;; "post") APP_ROUTE_NAME=$ROUTER_METHOD break ;; "patch") APP_ROUTE_NAME=$ROUTER_METHOD break ;; "delete") APP_ROUTE_NAME=$ROUTER_METHOD break ;; "options") APP_ROUTE_NAME=$ROUTER_METHOD break ;; *) echo "invalid option $REPLY";; esac done echo "#79 ROUTER_METHOD = $ROUTER_METHOD" #https://laravel.com/docs/9.x/controllers#actions-handled-by-resource-controller # // CONTROLLERS NAMING CONVENTIONS: # // 7 Common Resource Routes: # // index - Show all listings # // show - SHOW single listing # // create - Show form to create new listing (POST) # // edit - show form to edit listing # // update - update listing (POST) # // destroy - Delete Listing PS3=' Ente a route Method name (create): ' APP_ROUTE_NAMES=("index" "create" "store" "show" "edit" "update" "destroy") select RESOURCE_CONTROLLER in "${APP_ROUTE_NAMES[@]}"; do case $RESOURCE_CONTROLLER in "index") APP_ROUTE_NAME=$RESOURCE_CONTROLLER break ;; "create") APP_ROUTE_NAME=$RESOURCE_CONTROLLER break ;; "store") APP_ROUTE_NAME=$RESOURCE_CONTROLLER break ;; "show") APP_ROUTE_NAME=$RESOURCE_CONTROLLER break ;; "edit") APP_ROUTE_NAME=$RESOURCE_CONTROLLER break ;; "update") APP_ROUTE_NAME=$RESOURCE_CONTROLLER break ;; "destroy") APP_ROUTE_NAME=$RESOURCE_CONTROLLER break ;; *) echo "invalid option $REPLY";; esac done echo "#163 RESOURCE_CONTROLLER = $RESOURCE_CONTROLLER" # while [[ $APP_ROUTE_NAME == "" ]] # do # read -p "2. Ente a route Method name (index) : " APP_ROUTE_NAME # set -e # done # echo "#31 APP_ROUTE_NAME = $APP_ROUTE_NAME" # this option is if the blade file should be created in the view/ folder or sub foldre in /view # APP_VIEW_FOLDER='' # read -p "3. Ente a controller name (UserController): " APP_VIEW_FOLDER # if [[ $CONTROLLERNAME == "" ]] # then # CONTROLLERNAME=$CONTROLLERNAME_DEFAULT # set -e # fi # echo "#41 APP_VIEW_FOLDER = $APP_VIEW_FOLDER" #5 # CONTROLLERNAME is OK to be blank, no controller command will be generated by script while [[ $CONTROLLERNAME == "" ]] do read -p "6. Enter the Controlller Name (CamelizeText: UserController): If controller already exists, please also enter. " CONTROLLERNAME set -e done echo "#89 CONTROLLERNAME = $CONTROLLERNAME" VIEW_SUB_FOLDER="resources/views" ########################################### PROCESS INPUT ################################# ################################# CONTROLLER CONTROLLERFILE="app/Http/Controllers/Api/$CONTROLLERNAME.php" echo "#151 CONTROLLERFILE = $CONTROLLERFILE" # check if directory exists, IF NOT CREATE A NEW CONTROLLER #if [ ! -f $CONTROLLERFILE ] if [ ! -f "$CONTROLLERFILE" ] then CONTROLLER_COMAND="$APP_PLATFORM artisan make:controller Api/$CONTROLLERNAME" echo "#158 - CONTROLLER_COMAND = $CONTROLLER_COMAND" # Contorller file exisits, OK # controller file does not exits, so create #mkdir $CONTROLLERFILE #$APP_PLATFORM artisan make:controller $CONTROLLERNAME eval $CONTROLLER_COMAND set -e echo "#163 Controller Name Added: $CONTROLLERNAME" # IF THIS PAGE WILL HAVE A CONROLLER, A LAYOUT IS REQURED: # CHECK IF LAYOUT EXISTS< IF NOT CREATED: COMPONENTS_FOLDERNAME="$VIEW_SUB_FOLDER/components/" echo "#170 COMPONENTS_FOLDERNAME = $COMPONENTS_FOLDERNAME" LAYOUT_FILE="$COMPONENTS_FOLDERNAME/layout.blade.php" echo "#172 LAYOUT_FILE = $LAYOUT_FILE" if [ ! -d "$COMPONENTS_FOLDERNAME" ] then mkdir $COMPONENTS_FOLDERNAME echo "#173 COMPONENTS_FOLDERNAME created: $COMPONENTS_FOLDERNAME" LAYOUT_CODE=''"$APP_ROUTE_NAME"' {{$slot}}' echo $LAYOUT_CODE > $LAYOUT_FILE echo "#173 LAYOUT_FILE created: $LAYOUT_FILE" # layout.blade.php does not exits, so create fi else echo "#217 [YES] Controller File Exists CONTROLLERFILE: $CONTROLLERFILE" fi # MUST BE HERE to DECLARE APP_METHOD_FILE if [[ $APP_VIEW_FOLDER != "" ]] then # if its a sub folder of view/ then add a dot APP_METHOD_FILE="$APP_VIEW_FOLDER.$APP_ROUTE_NAME" set -e else APP_METHOD_FILE="$APP_ROUTE_NAME" fi echo "#173 APP_VIEW_FOLDER = $APP_VIEW_FOLDER" # always will be view: Example: https://github.com/bradtraversy/laragigs/blob/main/app/Http/Controllers/ListingController.php CONTROLLER_METHOD="public function $APP_ROUTE_NAME() {\n\t\t\treturn view('$APP_METHOD_FILE');\n\t\t}" echo "#176 CONTROLLER_METHOD = $CONTROLLER_METHOD" #https://unix.stackexchange.com/a/283411 # add this method to the 3rd line from the bottom in the file sed -zEi "s/(\n[^\n]*){3}$/\n$CONTROLLER_METHOD&/" $CONTROLLERFILE #sed -i "\/\/\NewMethods/a $CONTROLERCODE" $CONTROLLERFILE code $CONTROLLERFILE ################################# ROUTER # EXAMPLE: Route::get('/myadmin ', [ListingController::class, 'index']); echo "// AUTO GENERATED BY: https://www.webune.com/forums/Laravel-AddNewpage-api.sh.html" >> routes/api.php echo "Route::$ROUTER_METHOD('$APP_ROUTE', [$CONTROLLERNAME::class, '$APP_ROUTE_NAME']);" >> routes/api.php # open routes file code routes/api.php echo "#148 - Route added to api.php" # NO VIEWS FOR THIS VERSION ################################# VIEW # check if directory exists echo "#224 Check if exists: APP_VIEW_FOLDER=$APP_VIEW_FOLDER" VIEW_SUB_FOLDER="resources/views/$APP_VIEW_FOLDER/" echo "#186 VIEW_SUB_FOLDER = $VIEW_SUB_FOLDER" if [ ! -d $VIEW_SUB_FOLDER ] then # controller file does not exits, so create echo "#229 mkdir $VIEW_SUB_FOLDER" #DISABLED mkdir $VIEW_SUB_FOLDER set -e echo "#223 View Folder Created: $VIEW_SUB_FOLDER" else echo "#235 YES $APP_VIEW_FOLDER FILE ALREADY EXISTS" fi COMPONENTNAME_FILE="$VIEW_SUB_FOLDER$APP_ROUTE_NAME.blade.php" echo "#197 COMPONENTNAME_FILE = $COMPONENTNAME_FILE" # check if file exists if [ ! -f $COMPONENTNAME_FILE ] then # controller file does not exits, so create #DISABLED touch $COMPONENTNAME_FILE set -e fi VIEWCODE=$'\n\t... NEw Page name '"$APP_ROUTE_NAME"$' Created By Bash Script\n' #DISABLED echo "$VIEWCODE" > $COMPONENTNAME_FILE #DISABLED code $COMPONENTNAME_FILE #xdg-open http://localhost/$COMPONENTNAME/$APP_ROUTE_NAME echo $'######################\nCOMPLETED:######################\nhttp://localhost:8000'"$APP_ROUTE"$'\nhttp://localhost'"$APP_ROUTE"'' exit