├── .env.example ├── .env.testing ├── .gitattributes ├── .gitignore ├── app ├── Category.php ├── Comment.php ├── Console │ └── Kernel.php ├── Exceptions │ └── Handler.php ├── Facades │ └── Markdown.php ├── Http │ ├── Controllers │ │ ├── Admin │ │ │ ├── Controller.php │ │ │ └── PostController.php │ │ ├── Auth │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ └── ResetPasswordController.php │ │ ├── CommentController.php │ │ ├── Controller.php │ │ ├── HomeController.php │ │ └── PostController.php │ ├── Kernel.php │ ├── Middleware │ │ ├── EncryptCookies.php │ │ ├── RedirectIfAuthenticated.php │ │ └── VerifyCsrfToken.php │ └── Requests │ │ ├── CommentRequest.php │ │ └── PostRequest.php ├── Observers │ └── PostCountObserver.php ├── Post.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ ├── RouteServiceProvider.php │ └── ViewServiceProvider.php └── User.php ├── artisan ├── bootstrap ├── app.php ├── autoload.php └── cache │ └── .gitignore ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── compile.php ├── crudgenerator.php ├── database.php ├── debugbar.php ├── filesystems.php ├── mail.php ├── queue.php ├── services.php ├── session.php └── view.php ├── database ├── .gitignore ├── factories │ └── ModelFactory.php ├── migrations │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2017_01_16_155729_create_categories_table.php │ ├── 2017_01_16_185338_create_posts_table.php │ └── 2017_01_17_133437_create_comments_table.php └── seeds │ ├── DatabaseSeeder.php │ └── PostTableSeeder.php ├── gulpfile.js ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── favicon.ico ├── index.php ├── robots.txt └── web.config ├── readme.md ├── resources ├── assets │ ├── js │ │ ├── app.js │ │ ├── bootstrap.js │ │ └── components │ │ │ └── Example.vue │ └── sass │ │ ├── _variables.scss │ │ └── app.scss ├── lang │ └── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php └── views │ ├── admin │ ├── layout.blade.php │ └── posts │ │ ├── edit.blade.php │ │ ├── form.blade.php │ │ ├── index.blade.php │ │ └── new.blade.php │ ├── auth │ ├── login.blade.php │ ├── passwords │ │ ├── email.blade.php │ │ └── reset.blade.php │ └── register.blade.php │ ├── errors │ └── 503.blade.php │ ├── home.blade.php │ ├── layout.blade.php │ ├── layouts │ └── app.blade.php │ ├── partials │ └── sidebar.blade.php │ ├── posts │ ├── index.blade.php │ └── show.blade.php │ ├── sidebar.blade.php │ ├── vendor │ ├── .gitkeep │ └── pagination │ │ ├── bootstrap-4.blade.php │ │ ├── default.blade.php │ │ ├── simple-bootstrap-4.blade.php │ │ └── simple-default.blade.php │ └── welcome.blade.php ├── routes ├── api.php ├── console.php └── web.php ├── server.php ├── storage ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── debugbar │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── PostTest.php └── TestCase.php └── yarn.lock /.env.example: -------------------------------------------------------------------------------- 1 | APP_ENV=local 2 | APP_KEY= 3 | APP_DEBUG=true 4 | APP_LOG_LEVEL=debug 5 | APP_URL=http://localhost 6 | 7 | DB_CONNECTION=mysql 8 | DB_HOST=127.0.0.1 9 | DB_PORT=3306 10 | DB_DATABASE=homestead 11 | DB_USERNAME=homestead 12 | DB_PASSWORD=secret 13 | 14 | BROADCAST_DRIVER=log 15 | CACHE_DRIVER=file 16 | SESSION_DRIVER=file 17 | QUEUE_DRIVER=sync 18 | 19 | REDIS_HOST=127.0.0.1 20 | REDIS_PASSWORD=null 21 | REDIS_PORT=6379 22 | 23 | MAIL_DRIVER=smtp 24 | MAIL_HOST=mailtrap.io 25 | MAIL_PORT=2525 26 | MAIL_USERNAME=null 27 | MAIL_PASSWORD=null 28 | MAIL_ENCRYPTION=null 29 | 30 | PUSHER_APP_ID= 31 | PUSHER_KEY= 32 | PUSHER_SECRET= 33 | -------------------------------------------------------------------------------- /.env.testing: -------------------------------------------------------------------------------- 1 | APP_ENV=local 2 | APP_KEY=base64:DQMAvyvGUqXEkdh93BXG5yZVsKKp7tmKwjYYOQ9OteU= 3 | APP_DEBUG=true 4 | APP_LOG_LEVEL=debug 5 | APP_URL=http://localhost 6 | 7 | DB_CONNECTION=mysql 8 | DB_HOST=127.0.0.1 9 | DB_PORT=3306 10 | DB_DATABASE=test 11 | DB_USERNAME=root 12 | DB_PASSWORD=root 13 | 14 | BROADCAST_DRIVER=log 15 | CACHE_DRIVER=file 16 | SESSION_DRIVER=file 17 | QUEUE_DRIVER=sync 18 | 19 | REDIS_HOST=127.0.0.1 20 | REDIS_PASSWORD=null 21 | REDIS_PORT=6379 22 | 23 | MAIL_DRIVER=smtp 24 | MAIL_HOST=mailtrap.io 25 | MAIL_PORT=2525 26 | MAIL_USERNAME=null 27 | MAIL_PASSWORD=null 28 | MAIL_ENCRYPTION=null 29 | 30 | PUSHER_APP_ID= 31 | PUSHER_KEY= 32 | PUSHER_SECRET= 33 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | /node_modules 4 | /public/storage 5 | /storage/*.key 6 | /vendor 7 | /.idea 8 | Homestead.json 9 | Homestead.yaml 10 | .env 11 | -------------------------------------------------------------------------------- /app/Category.php: -------------------------------------------------------------------------------- 1 | belongsTo(Post::class); 15 | } 16 | 17 | public function getGravatarAttribute() 18 | { 19 | return "https://www.gravatar.com/avatar/" . md5($this->email) . '?d=mm&s=100'; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire') 28 | // ->hourly(); 29 | } 30 | 31 | /** 32 | * Register the Closure based commands for the application. 33 | * 34 | * @return void 35 | */ 36 | protected function commands() 37 | { 38 | require base_path('routes/console.php'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 60 | return response()->json(['error' => 'Unauthenticated.'], 401); 61 | } 62 | 63 | return redirect()->guest('login'); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/Facades/Markdown.php: -------------------------------------------------------------------------------- 1 | paginate(10); 14 | return view('admin.posts.index', ['posts' => $posts]); 15 | } 16 | 17 | public function create () { 18 | $post = new Post(); 19 | $categories = Category::pluck('name', 'id'); 20 | $users = User::pluck('name', 'id'); 21 | return view('admin.posts.new', compact('post', 'categories', 'users')); 22 | } 23 | 24 | public function store (PostRequest $request) { 25 | Post::create($request->all()); 26 | return redirect()->route('admin.posts.index')->with('success', 'Post created successfully'); 27 | } 28 | 29 | public function edit(Post $post) { 30 | $categories = Category::pluck('name', 'id'); 31 | $users = User::pluck('name', 'id'); 32 | return view('admin.posts.new', compact('post', 'categories', 'users')); 33 | } 34 | 35 | public function update(PostRequest $request, Post $post) { 36 | $post->update($request->all()); 37 | return redirect()->route('admin.posts.index')->with('success', 'Post updated successfully'); 38 | } 39 | 40 | public function destroy(Post $post) { 41 | $post->delete(); 42 | return redirect()->route('admin.posts.index')->with('success', 'Post destroyed successfully'); 43 | } 44 | 45 | } -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | middleware('guest', ['except' => 'logout']); 38 | } 39 | 40 | public function username() 41 | { 42 | return 'name'; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/RegisterController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 40 | } 41 | 42 | /** 43 | * Get a validator for an incoming registration request. 44 | * 45 | * @param array $data 46 | * @return \Illuminate\Contracts\Validation\Validator 47 | */ 48 | protected function validator(array $data) 49 | { 50 | return Validator::make($data, [ 51 | 'name' => 'required|max:255', 52 | 'email' => 'required|email|max:255|unique:users', 53 | 'password' => 'required|min:6|confirmed', 54 | ]); 55 | } 56 | 57 | /** 58 | * Create a new user instance after a valid registration. 59 | * 60 | * @param array $data 61 | * @return User 62 | */ 63 | protected function create(array $data) 64 | { 65 | return User::create([ 66 | 'name' => $data['name'], 67 | 'email' => $data['email'], 68 | 'password' => bcrypt($data['password']), 69 | ]); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ResetPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Controllers/CommentController.php: -------------------------------------------------------------------------------- 1 | all()); 15 | return redirect()->route('posts.show', ['slug' => $comment->post->slug])->with('success', 'Thanks for your comment'); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | middleware('auth'); 17 | } 18 | 19 | /** 20 | * Show the application dashboard. 21 | * 22 | * @return \Illuminate\Http\Response 23 | */ 24 | public function index() 25 | { 26 | return view('home'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Controllers/PostController.php: -------------------------------------------------------------------------------- 1 | paginate($this->per_page); 18 | return view('posts.index', compact('posts')); 19 | } 20 | 21 | public function category($slug) 22 | { 23 | $category = Category::where('slug', $slug)->first(); 24 | $posts = Post::with('category', 'user')->where('category_id', $category->id)->paginate($this->per_page); 25 | return view('posts.index', compact('posts', 'category')); 26 | } 27 | 28 | public function user($user_id) 29 | { 30 | $user = User::find($user_id); 31 | $posts = Post::with('category', 'user')->where('user_id', $user->id)->paginate($this->per_page); 32 | return view('posts.index', compact('posts', 'user')); 33 | } 34 | 35 | public function show($slug) 36 | { 37 | $post = Post::where('slug', $slug)->first(); 38 | $comment = new Comment(['post_id' => $post->id]); 39 | return view('posts.show', compact('post', 'comment')); 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 27 | \App\Http\Middleware\EncryptCookies::class, 28 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 29 | \Illuminate\Session\Middleware\StartSession::class, 30 | \Illuminate\View\Middleware\ShareErrorsFromSession::class, 31 | \App\Http\Middleware\VerifyCsrfToken::class, 32 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 33 | ], 34 | 35 | 'api' => [ 36 | 'throttle:60,1', 37 | 'bindings', 38 | ], 39 | ]; 40 | 41 | /** 42 | * The application's route middleware. 43 | * 44 | * These middleware may be assigned to groups or used individually. 45 | * 46 | * @var array 47 | */ 48 | protected $routeMiddleware = [ 49 | 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 50 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 51 | 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 52 | 'can' => \Illuminate\Auth\Middleware\Authorize::class, 53 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 54 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 55 | ]; 56 | } 57 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | check()) { 21 | return redirect('/home'); 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | 'required|min:2', 28 | 'email' => 'required|email', 29 | 'content' => 'required|min:10', 30 | 'post_id' => 'required|exists:posts,id' 31 | ]; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Http/Requests/PostRequest.php: -------------------------------------------------------------------------------- 1 | input('slug'))) { 29 | $this['slug'] = str_slug($this->input('name')); 30 | } else { 31 | $this['slug'] = str_slug($this->input('slug')); 32 | } 33 | $rules = [ 34 | 'name' => 'required|max:255', 35 | 'slug' => 'required|unique:posts', 36 | 'content' => 'required', 37 | 'category_id' => 'required|exists:categories,id', 38 | 'user_id' => 'required|exists:users,id' 39 | ]; 40 | if ($post = $this->route('post')) { 41 | $rules['slug'] .= ',slug,' . $post->id; 42 | } 43 | return $rules; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/Observers/PostCountObserver.php: -------------------------------------------------------------------------------- 1 | category()->increment('posts_count'); 14 | } 15 | 16 | public function deleted(Post $post) 17 | { 18 | $post->category()->decrement('posts_count'); 19 | } 20 | 21 | public function updating(Post $post) 22 | { 23 | $previous_category_id = $post->getOriginal('category_id'); 24 | if ($previous_category_id != $post->category_id) { 25 | Category::where('id', $previous_category_id)->decrement('posts_count'); 26 | Category::where('id', $post->category_id)->increment('posts_count'); 27 | } 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /app/Post.php: -------------------------------------------------------------------------------- 1 | belongsTo(Category::class); 35 | } 36 | 37 | public function user() 38 | { 39 | return $this->belongsTo(User::class); 40 | } 41 | 42 | public function comments(){ 43 | return $this->hasMany(Comment::class); 44 | } 45 | 46 | public function getHtmlAttribute() { 47 | return Markdown::parse($this->content); 48 | } 49 | 50 | public function getExcerpt($max_words = 100, $ending = "...") { 51 | $text = strip_tags($this->html); 52 | $words = explode(' ', $text); 53 | if (count($words) > $max_words) { 54 | return implode(' ', array_slice($words, 0, $max_words)) . $ending; 55 | } 56 | return $text; 57 | } 58 | 59 | 60 | } 61 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->environment() !== 'production') { 30 | $this->app->register(\Barryvdh\Debugbar\ServiceProvider::class); 31 | $this->app->register(IdeHelperServiceProvider::class); 32 | } 33 | $this->app->singleton(GithubMarkdown::class, function ($app) { 34 | return new GithubMarkdown(); 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/Providers/AuthServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any authentication / authorization services. 21 | * 22 | * @return void 23 | */ 24 | public function boot() 25 | { 26 | $this->registerPolicies(); 27 | 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | id === (int) $userId; 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Providers/EventServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'App\Listeners\EventListener', 18 | ], 19 | ]; 20 | 21 | /** 22 | * Register any events for your application. 23 | * 24 | * @return void 25 | */ 26 | public function boot() 27 | { 28 | parent::boot(); 29 | 30 | // 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | mapApiRoutes(); 39 | 40 | $this->mapWebRoutes(); 41 | 42 | // 43 | } 44 | 45 | /** 46 | * Define the "web" routes for the application. 47 | * 48 | * These routes all receive session state, CSRF protection, etc. 49 | * 50 | * @return void 51 | */ 52 | protected function mapWebRoutes() 53 | { 54 | Route::group([ 55 | 'middleware' => 'web', 56 | 'namespace' => $this->namespace, 57 | ], function ($router) { 58 | require base_path('routes/web.php'); 59 | }); 60 | } 61 | 62 | /** 63 | * Define the "api" routes for the application. 64 | * 65 | * These routes are typically stateless. 66 | * 67 | * @return void 68 | */ 69 | protected function mapApiRoutes() 70 | { 71 | Route::group([ 72 | 'middleware' => 'api', 73 | 'namespace' => $this->namespace, 74 | 'prefix' => 'api', 75 | ], function ($router) { 76 | require base_path('routes/api.php'); 77 | }); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /app/Providers/ViewServiceProvider.php: -------------------------------------------------------------------------------- 1 | composer('partials.sidebar', function ($view) { 20 | $view->with('categories', Category::all()); 21 | $view->with('posts', Post::orderBy('created_at', 'desc')->limit(2)->get()); 22 | }); 23 | } 24 | 25 | /** 26 | * Register the application services. 27 | * 28 | * @return void 29 | */ 30 | public function register() 31 | { 32 | // 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/User.php: -------------------------------------------------------------------------------- 1 | make(Illuminate\Contracts\Console\Kernel::class); 32 | 33 | $status = $kernel->handle( 34 | $input = new Symfony\Component\Console\Input\ArgvInput, 35 | new Symfony\Component\Console\Output\ConsoleOutput 36 | ); 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | Shutdown The Application 41 | |-------------------------------------------------------------------------- 42 | | 43 | | Once Artisan has finished running. We will fire off the shutdown events 44 | | so that any final work may be done by the application before we shut 45 | | down the process. This is the last thing to happen to the request. 46 | | 47 | */ 48 | 49 | $kernel->terminate($input, $status); 50 | 51 | exit($status); 52 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | App\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | App\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | App\Exceptions\Handler::class 42 | ); 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Return The Application 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This script returns the application instance. The instance is given to 50 | | the calling script so we can separate the building of the instances 51 | | from the actual running of the application and sending responses. 52 | | 53 | */ 54 | 55 | return $app; 56 | -------------------------------------------------------------------------------- /bootstrap/autoload.php: -------------------------------------------------------------------------------- 1 | =5.6.4", 9 | "cebe/markdown": "~1.0.1", 10 | "laravel/framework": "5.3.*", 11 | "laravelcollective/html": "^5.3" 12 | }, 13 | "require-dev": { 14 | "barryvdh/laravel-debugbar": "^2.3", 15 | "barryvdh/laravel-ide-helper": "^2.2", 16 | "doctrine/dbal": "^2.7", 17 | "fzaninotto/faker": "^1.6", 18 | "mockery/mockery": "0.9.*", 19 | "phpunit/phpunit": "~5.0", 20 | "symfony/css-selector": "3.1.*", 21 | "symfony/dom-crawler": "3.1.*" 22 | }, 23 | "autoload": { 24 | "classmap": [ 25 | "database" 26 | ], 27 | "psr-4": { 28 | "App\\": "app/" 29 | } 30 | }, 31 | "autoload-dev": { 32 | "classmap": [ 33 | "tests/TestCase.php" 34 | ] 35 | }, 36 | "scripts": { 37 | "post-root-package-install": [ 38 | "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 39 | ], 40 | "post-create-project-cmd": [ 41 | "php artisan key:generate" 42 | ], 43 | "post-install-cmd": [ 44 | "Illuminate\\Foundation\\ComposerScripts::postInstall", 45 | "php artisan optimize" 46 | ], 47 | "post-update-cmd": [ 48 | "Illuminate\\Foundation\\ComposerScripts::postUpdate", 49 | "php artisan optimize" 50 | ] 51 | }, 52 | "config": { 53 | "preferred-install": "dist", 54 | "sort-packages": true 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | 'Laravel', 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Application Environment 20 | |-------------------------------------------------------------------------- 21 | | 22 | | This value determines the "environment" your application is currently 23 | | running in. This may determine how you prefer to configure various 24 | | services your application utilizes. Set this in your ".env" file. 25 | | 26 | */ 27 | 28 | 'env' => env('APP_ENV', 'production'), 29 | 30 | /* 31 | |-------------------------------------------------------------------------- 32 | | Application Debug Mode 33 | |-------------------------------------------------------------------------- 34 | | 35 | | When your application is in debug mode, detailed error messages with 36 | | stack traces will be shown on every error that occurs within your 37 | | application. If disabled, a simple generic error page is shown. 38 | | 39 | */ 40 | 41 | 'debug' => env('APP_DEBUG', false), 42 | 43 | /* 44 | |-------------------------------------------------------------------------- 45 | | Application URL 46 | |-------------------------------------------------------------------------- 47 | | 48 | | This URL is used by the console to properly generate URLs when using 49 | | the Artisan command line tool. You should set this to the root of 50 | | your application so that it is used when running Artisan tasks. 51 | | 52 | */ 53 | 54 | 'url' => env('APP_URL', 'http://localhost'), 55 | 56 | /* 57 | |-------------------------------------------------------------------------- 58 | | Application Timezone 59 | |-------------------------------------------------------------------------- 60 | | 61 | | Here you may specify the default timezone for your application, which 62 | | will be used by the PHP date and date-time functions. We have gone 63 | | ahead and set this to a sensible default for you out of the box. 64 | | 65 | */ 66 | 67 | 'timezone' => 'UTC', 68 | 69 | /* 70 | |-------------------------------------------------------------------------- 71 | | Application Locale Configuration 72 | |-------------------------------------------------------------------------- 73 | | 74 | | The application locale determines the default locale that will be used 75 | | by the translation service provider. You are free to set this value 76 | | to any of the locales which will be supported by the application. 77 | | 78 | */ 79 | 80 | 'locale' => 'en', 81 | 82 | /* 83 | |-------------------------------------------------------------------------- 84 | | Application Fallback Locale 85 | |-------------------------------------------------------------------------- 86 | | 87 | | The fallback locale determines the locale to use when the current one 88 | | is not available. You may change the value to correspond to any of 89 | | the language folders that are provided through your application. 90 | | 91 | */ 92 | 93 | 'fallback_locale' => 'en', 94 | 95 | /* 96 | |-------------------------------------------------------------------------- 97 | | Encryption Key 98 | |-------------------------------------------------------------------------- 99 | | 100 | | This key is used by the Illuminate encrypter service and should be set 101 | | to a random, 32 character string, otherwise these encrypted strings 102 | | will not be safe. Please do this before deploying an application! 103 | | 104 | */ 105 | 106 | 'key' => env('APP_KEY'), 107 | 108 | 'cipher' => 'AES-256-CBC', 109 | 110 | /* 111 | |-------------------------------------------------------------------------- 112 | | Logging Configuration 113 | |-------------------------------------------------------------------------- 114 | | 115 | | Here you may configure the log settings for your application. Out of 116 | | the box, Laravel uses the Monolog PHP logging library. This gives 117 | | you a variety of powerful log handlers / formatters to utilize. 118 | | 119 | | Available Settings: "single", "daily", "syslog", "errorlog" 120 | | 121 | */ 122 | 123 | 'log' => env('APP_LOG', 'single'), 124 | 125 | 'log_level' => env('APP_LOG_LEVEL', 'debug'), 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | Autoloaded Service Providers 130 | |-------------------------------------------------------------------------- 131 | | 132 | | The service providers listed here will be automatically loaded on the 133 | | request to your application. Feel free to add your own services to 134 | | this array to grant expanded functionality to your applications. 135 | | 136 | */ 137 | 138 | 'providers' => [ 139 | 140 | /* 141 | * Laravel Framework Service Providers... 142 | */ 143 | Illuminate\Auth\AuthServiceProvider::class, 144 | Illuminate\Broadcasting\BroadcastServiceProvider::class, 145 | Illuminate\Bus\BusServiceProvider::class, 146 | Illuminate\Cache\CacheServiceProvider::class, 147 | Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, 148 | Illuminate\Cookie\CookieServiceProvider::class, 149 | Illuminate\Database\DatabaseServiceProvider::class, 150 | Illuminate\Encryption\EncryptionServiceProvider::class, 151 | Illuminate\Filesystem\FilesystemServiceProvider::class, 152 | Illuminate\Foundation\Providers\FoundationServiceProvider::class, 153 | Illuminate\Hashing\HashServiceProvider::class, 154 | Illuminate\Mail\MailServiceProvider::class, 155 | Illuminate\Notifications\NotificationServiceProvider::class, 156 | Illuminate\Pagination\PaginationServiceProvider::class, 157 | Illuminate\Pipeline\PipelineServiceProvider::class, 158 | Illuminate\Queue\QueueServiceProvider::class, 159 | Illuminate\Redis\RedisServiceProvider::class, 160 | Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, 161 | Illuminate\Session\SessionServiceProvider::class, 162 | Illuminate\Translation\TranslationServiceProvider::class, 163 | Illuminate\Validation\ValidationServiceProvider::class, 164 | Illuminate\View\ViewServiceProvider::class, 165 | 166 | /* 167 | * Package Service Providers... 168 | */ 169 | 170 | // 171 | 172 | /* 173 | * Application Service Providers... 174 | */ 175 | App\Providers\AppServiceProvider::class, 176 | App\Providers\AuthServiceProvider::class, 177 | // App\Providers\BroadcastServiceProvider::class, 178 | App\Providers\EventServiceProvider::class, 179 | App\Providers\RouteServiceProvider::class, 180 | \Collective\Html\HtmlServiceProvider::class, 181 | \App\Providers\ViewServiceProvider::class 182 | 183 | ], 184 | 185 | /* 186 | |-------------------------------------------------------------------------- 187 | | Class Aliases 188 | |-------------------------------------------------------------------------- 189 | | 190 | | This array of class aliases will be registered when this application 191 | | is started. However, feel free to register as many as you wish as 192 | | the aliases are "lazy" loaded so they don't hinder performance. 193 | | 194 | */ 195 | 196 | 'aliases' => [ 197 | 198 | 'App' => Illuminate\Support\Facades\App::class, 199 | 'Artisan' => Illuminate\Support\Facades\Artisan::class, 200 | 'Auth' => Illuminate\Support\Facades\Auth::class, 201 | 'Blade' => Illuminate\Support\Facades\Blade::class, 202 | 'Bus' => Illuminate\Support\Facades\Bus::class, 203 | 'Cache' => Illuminate\Support\Facades\Cache::class, 204 | 'Config' => Illuminate\Support\Facades\Config::class, 205 | 'Cookie' => Illuminate\Support\Facades\Cookie::class, 206 | 'Crypt' => Illuminate\Support\Facades\Crypt::class, 207 | 'DB' => Illuminate\Support\Facades\DB::class, 208 | 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 209 | 'Event' => Illuminate\Support\Facades\Event::class, 210 | 'File' => Illuminate\Support\Facades\File::class, 211 | 'Gate' => Illuminate\Support\Facades\Gate::class, 212 | 'Hash' => Illuminate\Support\Facades\Hash::class, 213 | 'Lang' => Illuminate\Support\Facades\Lang::class, 214 | 'Log' => Illuminate\Support\Facades\Log::class, 215 | 'Mail' => Illuminate\Support\Facades\Mail::class, 216 | 'Notification' => Illuminate\Support\Facades\Notification::class, 217 | 'Password' => Illuminate\Support\Facades\Password::class, 218 | 'Queue' => Illuminate\Support\Facades\Queue::class, 219 | 'Redirect' => Illuminate\Support\Facades\Redirect::class, 220 | 'Redis' => Illuminate\Support\Facades\Redis::class, 221 | 'Request' => Illuminate\Support\Facades\Request::class, 222 | 'Response' => Illuminate\Support\Facades\Response::class, 223 | 'Route' => Illuminate\Support\Facades\Route::class, 224 | 'Schema' => Illuminate\Support\Facades\Schema::class, 225 | 'Session' => Illuminate\Support\Facades\Session::class, 226 | 'Storage' => Illuminate\Support\Facades\Storage::class, 227 | 'URL' => Illuminate\Support\Facades\URL::class, 228 | 'Validator' => Illuminate\Support\Facades\Validator::class, 229 | 'View' => Illuminate\Support\Facades\View::class, 230 | 'Form' => Collective\Html\FormFacade::class, 231 | 'HTML' => Collective\Html\HtmlFacade::class 232 | 233 | ], 234 | 235 | ]; 236 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'guard' => 'web', 18 | 'passwords' => 'users', 19 | ], 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Authentication Guards 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Next, you may define every authentication guard for your application. 27 | | Of course, a great default configuration has been defined for you 28 | | here which uses session storage and the Eloquent user provider. 29 | | 30 | | All authentication drivers have a user provider. This defines how the 31 | | users are actually retrieved out of your database or other storage 32 | | mechanisms used by this application to persist your user's data. 33 | | 34 | | Supported: "session", "token" 35 | | 36 | */ 37 | 38 | 'guards' => [ 39 | 'web' => [ 40 | 'driver' => 'session', 41 | 'provider' => 'users', 42 | ], 43 | 44 | 'api' => [ 45 | 'driver' => 'token', 46 | 'provider' => 'users', 47 | ], 48 | ], 49 | 50 | /* 51 | |-------------------------------------------------------------------------- 52 | | User Providers 53 | |-------------------------------------------------------------------------- 54 | | 55 | | All authentication drivers have a user provider. This defines how the 56 | | users are actually retrieved out of your database or other storage 57 | | mechanisms used by this application to persist your user's data. 58 | | 59 | | If you have multiple user tables or models you may configure multiple 60 | | sources which represent each model / table. These sources may then 61 | | be assigned to any extra authentication guards you have defined. 62 | | 63 | | Supported: "database", "eloquent" 64 | | 65 | */ 66 | 67 | 'providers' => [ 68 | 'users' => [ 69 | 'driver' => 'eloquent', 70 | 'model' => App\User::class, 71 | ], 72 | 73 | // 'users' => [ 74 | // 'driver' => 'database', 75 | // 'table' => 'users', 76 | // ], 77 | ], 78 | 79 | /* 80 | |-------------------------------------------------------------------------- 81 | | Resetting Passwords 82 | |-------------------------------------------------------------------------- 83 | | 84 | | You may specify multiple password reset configurations if you have more 85 | | than one user table or model in the application and you want to have 86 | | separate password reset settings based on the specific user types. 87 | | 88 | | The expire time is the number of minutes that the reset token should be 89 | | considered valid. This security feature keeps tokens short-lived so 90 | | they have less time to be guessed. You may change this as needed. 91 | | 92 | */ 93 | 94 | 'passwords' => [ 95 | 'users' => [ 96 | 'provider' => 'users', 97 | 'table' => 'password_resets', 98 | 'expire' => 60, 99 | ], 100 | ], 101 | 102 | ]; 103 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'null'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Broadcast Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the broadcast connections that will be used 26 | | to broadcast events to other systems or over websockets. Samples of 27 | | each available type of connection are provided inside this array. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'pusher' => [ 34 | 'driver' => 'pusher', 35 | 'key' => env('PUSHER_KEY'), 36 | 'secret' => env('PUSHER_SECRET'), 37 | 'app_id' => env('PUSHER_APP_ID'), 38 | 'options' => [ 39 | // 40 | ], 41 | ], 42 | 43 | 'redis' => [ 44 | 'driver' => 'redis', 45 | 'connection' => 'default', 46 | ], 47 | 48 | 'log' => [ 49 | 'driver' => 'log', 50 | ], 51 | 52 | 'null' => [ 53 | 'driver' => 'null', 54 | ], 55 | 56 | ], 57 | 58 | ]; 59 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_DRIVER', 'file'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Cache Stores 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the cache "stores" for your application as 26 | | well as their drivers. You may even define multiple stores for the 27 | | same cache driver to group types of items stored in your caches. 28 | | 29 | */ 30 | 31 | 'stores' => [ 32 | 33 | 'apc' => [ 34 | 'driver' => 'apc', 35 | ], 36 | 37 | 'array' => [ 38 | 'driver' => 'array', 39 | ], 40 | 41 | 'database' => [ 42 | 'driver' => 'database', 43 | 'table' => 'cache', 44 | 'connection' => null, 45 | ], 46 | 47 | 'file' => [ 48 | 'driver' => 'file', 49 | 'path' => storage_path('framework/cache'), 50 | ], 51 | 52 | 'memcached' => [ 53 | 'driver' => 'memcached', 54 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 55 | 'sasl' => [ 56 | env('MEMCACHED_USERNAME'), 57 | env('MEMCACHED_PASSWORD'), 58 | ], 59 | 'options' => [ 60 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 61 | ], 62 | 'servers' => [ 63 | [ 64 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 65 | 'port' => env('MEMCACHED_PORT', 11211), 66 | 'weight' => 100, 67 | ], 68 | ], 69 | ], 70 | 71 | 'redis' => [ 72 | 'driver' => 'redis', 73 | 'connection' => 'default', 74 | ], 75 | 76 | ], 77 | 78 | /* 79 | |-------------------------------------------------------------------------- 80 | | Cache Key Prefix 81 | |-------------------------------------------------------------------------- 82 | | 83 | | When utilizing a RAM based store such as APC or Memcached, there might 84 | | be other applications utilizing the same cache. So, we'll specify a 85 | | value to get prefixed to all our keys so we can avoid collisions. 86 | | 87 | */ 88 | 89 | 'prefix' => 'laravel', 90 | 91 | ]; 92 | -------------------------------------------------------------------------------- /config/compile.php: -------------------------------------------------------------------------------- 1 | [ 17 | // 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled File Providers 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may list service providers which define a "compiles" function 26 | | that returns additional files that should be compiled, providing an 27 | | easy way to get common files from any packages you are utilizing. 28 | | 29 | */ 30 | 31 | 'providers' => [ 32 | // 33 | ], 34 | 35 | ]; 36 | -------------------------------------------------------------------------------- /config/crudgenerator.php: -------------------------------------------------------------------------------- 1 | false, 6 | 7 | /* 8 | |-------------------------------------------------------------------------- 9 | | Crud Generator Template Stubs Storage Path 10 | |-------------------------------------------------------------------------- 11 | | 12 | | Here you can specify your custom template path for the generator. 13 | | 14 | */ 15 | 16 | 'path' => base_path('resources/crud-generator/'), 17 | 18 | /** 19 | * Columns number to show in view's table. 20 | */ 21 | 'view_columns_number' => 3, 22 | 23 | ]; 24 | -------------------------------------------------------------------------------- /config/database.php: -------------------------------------------------------------------------------- 1 | PDO::FETCH_OBJ, 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Default Database Connection Name 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may specify which of the database connections below you wish 24 | | to use as your default connection for all database work. Of course 25 | | you may use many connections at once using the Database library. 26 | | 27 | */ 28 | 29 | 'default' => env('DB_CONNECTION', 'mysql'), 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Database Connections 34 | |-------------------------------------------------------------------------- 35 | | 36 | | Here are each of the database connections setup for your application. 37 | | Of course, examples of configuring each database platform that is 38 | | supported by Laravel is shown below to make development simple. 39 | | 40 | | 41 | | All database work in Laravel is done through the PHP PDO facilities 42 | | so make sure you have the driver for your particular database of 43 | | choice installed on your machine before you begin development. 44 | | 45 | */ 46 | 47 | 'connections' => [ 48 | 49 | 'sqlite' => [ 50 | 'driver' => 'sqlite', 51 | 'database' => env('DB_DATABASE', database_path('database.sqlite')), 52 | 'prefix' => '', 53 | ], 54 | 55 | 'mysql' => [ 56 | 'driver' => 'mysql', 57 | 'host' => env('DB_HOST', '127.0.0.1'), 58 | 'port' => env('DB_PORT', '3306'), 59 | 'database' => env('DB_DATABASE', 'forge'), 60 | 'username' => env('DB_USERNAME', 'forge'), 61 | 'password' => env('DB_PASSWORD', ''), 62 | 'charset' => 'utf8', 63 | 'collation' => 'utf8_unicode_ci', 64 | 'prefix' => '', 65 | 'strict' => true, 66 | 'engine' => null, 67 | ], 68 | 69 | 'pgsql' => [ 70 | 'driver' => 'pgsql', 71 | 'host' => env('DB_HOST', '127.0.0.1'), 72 | 'port' => env('DB_PORT', '5432'), 73 | 'database' => env('DB_DATABASE', 'forge'), 74 | 'username' => env('DB_USERNAME', 'forge'), 75 | 'password' => env('DB_PASSWORD', ''), 76 | 'charset' => 'utf8', 77 | 'prefix' => '', 78 | 'schema' => 'public', 79 | 'sslmode' => 'prefer', 80 | ], 81 | 82 | ], 83 | 84 | /* 85 | |-------------------------------------------------------------------------- 86 | | Migration Repository Table 87 | |-------------------------------------------------------------------------- 88 | | 89 | | This table keeps track of all the migrations that have already run for 90 | | your application. Using this information, we can determine which of 91 | | the migrations on disk haven't actually been run in the database. 92 | | 93 | */ 94 | 95 | 'migrations' => 'migrations', 96 | 97 | /* 98 | |-------------------------------------------------------------------------- 99 | | Redis Databases 100 | |-------------------------------------------------------------------------- 101 | | 102 | | Redis is an open source, fast, and advanced key-value store that also 103 | | provides a richer set of commands than a typical key-value systems 104 | | such as APC or Memcached. Laravel makes it easy to dig right in. 105 | | 106 | */ 107 | 108 | 'redis' => [ 109 | 110 | 'cluster' => false, 111 | 112 | 'default' => [ 113 | 'host' => env('REDIS_HOST', '127.0.0.1'), 114 | 'password' => env('REDIS_PASSWORD', null), 115 | 'port' => env('REDIS_PORT', 6379), 116 | 'database' => 0, 117 | ], 118 | 119 | ], 120 | 121 | ]; 122 | -------------------------------------------------------------------------------- /config/debugbar.php: -------------------------------------------------------------------------------- 1 | null, 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Storage settings 20 | |-------------------------------------------------------------------------- 21 | | 22 | | DebugBar stores data for session/ajax requests. 23 | | You can disable this, so the debugbar stores data in headers/session, 24 | | but this can cause problems with large data collectors. 25 | | By default, file storage (in the storage folder) is used. Redis and PDO 26 | | can also be used. For PDO, run the package migrations first. 27 | | 28 | */ 29 | 'storage' => [ 30 | 'enabled' => true, 31 | 'driver' => 'file', // redis, file, pdo, custom 32 | 'path' => storage_path('debugbar'), // For file driver 33 | 'connection' => null, // Leave null for default connection (Redis/PDO) 34 | 'provider' => '' // Instance of StorageInterface for custom driver 35 | ], 36 | 37 | /* 38 | |-------------------------------------------------------------------------- 39 | | Vendors 40 | |-------------------------------------------------------------------------- 41 | | 42 | | Vendor files are included by default, but can be set to false. 43 | | This can also be set to 'js' or 'css', to only include javascript or css vendor files. 44 | | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files) 45 | | and for js: jquery and and highlight.js 46 | | So if you want syntax highlighting, set it to true. 47 | | jQuery is set to not conflict with existing jQuery scripts. 48 | | 49 | */ 50 | 51 | 'include_vendors' => true, 52 | 53 | /* 54 | |-------------------------------------------------------------------------- 55 | | Capture Ajax Requests 56 | |-------------------------------------------------------------------------- 57 | | 58 | | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors), 59 | | you can use this option to disable sending the data through the headers. 60 | | 61 | */ 62 | 63 | 'capture_ajax' => true, 64 | 65 | /* 66 | |-------------------------------------------------------------------------- 67 | | Clockwork integration 68 | |-------------------------------------------------------------------------- 69 | | 70 | | The Debugbar can emulate the Clockwork headers, so you can use the Chrome 71 | | Extension, without the server-side code. It uses Debugbar collectors instead. 72 | | 73 | */ 74 | 'clockwork' => false, 75 | 76 | /* 77 | |-------------------------------------------------------------------------- 78 | | DataCollectors 79 | |-------------------------------------------------------------------------- 80 | | 81 | | Enable/disable DataCollectors 82 | | 83 | */ 84 | 85 | 'collectors' => [ 86 | 'phpinfo' => true, // Php version 87 | 'messages' => true, // Messages 88 | 'time' => true, // Time Datalogger 89 | 'memory' => true, // Memory usage 90 | 'exceptions' => true, // Exception displayer 91 | 'log' => true, // Logs from Monolog (merged in messages if enabled) 92 | 'db' => true, // Show database (PDO) queries and bindings 93 | 'views' => true, // Views with their data 94 | 'route' => true, // Current route information 95 | 'laravel' => false, // Laravel version and environment 96 | 'events' => false, // All events fired 97 | 'default_request' => false, // Regular or special Symfony request logger 98 | 'symfony_request' => true, // Only one can be enabled.. 99 | 'mail' => true, // Catch mail messages 100 | 'logs' => false, // Add the latest log messages 101 | 'files' => false, // Show the included files 102 | 'config' => false, // Display config settings 103 | 'auth' => false, // Display Laravel authentication status 104 | 'gate' => false, // Display Laravel Gate checks 105 | 'session' => true, // Display session data 106 | ], 107 | 108 | /* 109 | |-------------------------------------------------------------------------- 110 | | Extra options 111 | |-------------------------------------------------------------------------- 112 | | 113 | | Configure some DataCollectors 114 | | 115 | */ 116 | 117 | 'options' => [ 118 | 'auth' => [ 119 | 'show_name' => false, // Also show the users name/email in the debugbar 120 | ], 121 | 'db' => [ 122 | 'with_params' => true, // Render SQL with the parameters substituted 123 | 'timeline' => false, // Add the queries to the timeline 124 | 'backtrace' => false, // EXPERIMENTAL: Use a backtrace to find the origin of the query in your files. 125 | 'explain' => [ // EXPERIMENTAL: Show EXPLAIN output on queries 126 | 'enabled' => false, 127 | 'types' => ['SELECT'], // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+ 128 | ], 129 | 'hints' => true, // Show hints for common mistakes 130 | ], 131 | 'mail' => [ 132 | 'full_log' => false 133 | ], 134 | 'views' => [ 135 | 'data' => false, //Note: Can slow down the application, because the data can be quite large.. 136 | ], 137 | 'route' => [ 138 | 'label' => true // show complete route on bar 139 | ], 140 | 'logs' => [ 141 | 'file' => null 142 | ], 143 | ], 144 | 145 | /* 146 | |-------------------------------------------------------------------------- 147 | | Inject Debugbar in Response 148 | |-------------------------------------------------------------------------- 149 | | 150 | | Usually, the debugbar is added just before
21 | 22 | 44 | 45 |, by listening to the
151 | | Response after the App is done. If you disable this, you have to add them
152 | | in your template yourself. See http://phpdebugbar.com/docs/rendering.html
153 | |
154 | */
155 |
156 | 'inject' => true,
157 |
158 | /*
159 | |--------------------------------------------------------------------------
160 | | DebugBar route prefix
161 | |--------------------------------------------------------------------------
162 | |
163 | | Sometimes you want to set route prefix to be used by DebugBar to load
164 | | its resources from. Usually the need comes from misconfigured web server or
165 | | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97
166 | |
167 | */
168 | 'route_prefix' => '_debugbar',
169 |
170 | ];
171 |
--------------------------------------------------------------------------------
/config/filesystems.php:
--------------------------------------------------------------------------------
1 | 'local',
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Default Cloud Filesystem Disk
21 | |--------------------------------------------------------------------------
22 | |
23 | | Many applications store files both locally and in the cloud. For this
24 | | reason, you may specify a default "cloud" driver here. This driver
25 | | will be bound as the Cloud disk implementation in the container.
26 | |
27 | */
28 |
29 | 'cloud' => 's3',
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Filesystem Disks
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here you may configure as many filesystem "disks" as you wish, and you
37 | | may even configure multiple disks of the same driver. Defaults have
38 | | been setup for each driver as an example of the required options.
39 | |
40 | | Supported Drivers: "local", "ftp", "s3", "rackspace"
41 | |
42 | */
43 |
44 | 'disks' => [
45 |
46 | 'local' => [
47 | 'driver' => 'local',
48 | 'root' => storage_path('app'),
49 | ],
50 |
51 | 'public' => [
52 | 'driver' => 'local',
53 | 'root' => storage_path('app/public'),
54 | 'visibility' => 'public',
55 | ],
56 |
57 | 's3' => [
58 | 'driver' => 's3',
59 | 'key' => 'your-key',
60 | 'secret' => 'your-secret',
61 | 'region' => 'your-region',
62 | 'bucket' => 'your-bucket',
63 | ],
64 |
65 | ],
66 |
67 | ];
68 |
--------------------------------------------------------------------------------
/config/mail.php:
--------------------------------------------------------------------------------
1 | env('MAIL_DRIVER', 'smtp'),
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | SMTP Host Address
24 | |--------------------------------------------------------------------------
25 | |
26 | | Here you may provide the host address of the SMTP server used by your
27 | | applications. A default option is provided that is compatible with
28 | | the Mailgun mail service which will provide reliable deliveries.
29 | |
30 | */
31 |
32 | 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
33 |
34 | /*
35 | |--------------------------------------------------------------------------
36 | | SMTP Host Port
37 | |--------------------------------------------------------------------------
38 | |
39 | | This is the SMTP port used by your application to deliver e-mails to
40 | | users of the application. Like the host we have set this value to
41 | | stay compatible with the Mailgun e-mail application by default.
42 | |
43 | */
44 |
45 | 'port' => env('MAIL_PORT', 587),
46 |
47 | /*
48 | |--------------------------------------------------------------------------
49 | | Global "From" Address
50 | |--------------------------------------------------------------------------
51 | |
52 | | You may wish for all e-mails sent by your application to be sent from
53 | | the same address. Here, you may specify a name and address that is
54 | | used globally for all e-mails that are sent by your application.
55 | |
56 | */
57 |
58 | 'from' => [
59 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
60 | 'name' => env('MAIL_FROM_NAME', 'Example'),
61 | ],
62 |
63 | /*
64 | |--------------------------------------------------------------------------
65 | | E-Mail Encryption Protocol
66 | |--------------------------------------------------------------------------
67 | |
68 | | Here you may specify the encryption protocol that should be used when
69 | | the application send e-mail messages. A sensible default using the
70 | | transport layer security protocol should provide great security.
71 | |
72 | */
73 |
74 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
75 |
76 | /*
77 | |--------------------------------------------------------------------------
78 | | SMTP Server Username
79 | |--------------------------------------------------------------------------
80 | |
81 | | If your SMTP server requires a username for authentication, you should
82 | | set it here. This will get used to authenticate with your server on
83 | | connection. You may also set the "password" value below this one.
84 | |
85 | */
86 |
87 | 'username' => env('MAIL_USERNAME'),
88 |
89 | /*
90 | |--------------------------------------------------------------------------
91 | | SMTP Server Password
92 | |--------------------------------------------------------------------------
93 | |
94 | | Here you may set the password required by your SMTP server to send out
95 | | messages from your application. This will be given to the server on
96 | | connection so that the application will be able to send messages.
97 | |
98 | */
99 |
100 | 'password' => env('MAIL_PASSWORD'),
101 |
102 | /*
103 | |--------------------------------------------------------------------------
104 | | Sendmail System Path
105 | |--------------------------------------------------------------------------
106 | |
107 | | When using the "sendmail" driver to send e-mails, we will need to know
108 | | the path to where Sendmail lives on this server. A default path has
109 | | been provided here, which will work well on most of your systems.
110 | |
111 | */
112 |
113 | 'sendmail' => '/usr/sbin/sendmail -bs',
114 |
115 | ];
116 |
--------------------------------------------------------------------------------
/config/queue.php:
--------------------------------------------------------------------------------
1 | env('QUEUE_DRIVER', 'sync'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Queue Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may configure the connection information for each server that
26 | | is used by your application. A default configuration has been added
27 | | for each back-end shipped with Laravel. You are free to add more.
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'sync' => [
34 | 'driver' => 'sync',
35 | ],
36 |
37 | 'database' => [
38 | 'driver' => 'database',
39 | 'table' => 'jobs',
40 | 'queue' => 'default',
41 | 'retry_after' => 90,
42 | ],
43 |
44 | 'beanstalkd' => [
45 | 'driver' => 'beanstalkd',
46 | 'host' => 'localhost',
47 | 'queue' => 'default',
48 | 'retry_after' => 90,
49 | ],
50 |
51 | 'sqs' => [
52 | 'driver' => 'sqs',
53 | 'key' => 'your-public-key',
54 | 'secret' => 'your-secret-key',
55 | 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',
56 | 'queue' => 'your-queue-name',
57 | 'region' => 'us-east-1',
58 | ],
59 |
60 | 'redis' => [
61 | 'driver' => 'redis',
62 | 'connection' => 'default',
63 | 'queue' => 'default',
64 | 'retry_after' => 90,
65 | ],
66 |
67 | ],
68 |
69 | /*
70 | |--------------------------------------------------------------------------
71 | | Failed Queue Jobs
72 | |--------------------------------------------------------------------------
73 | |
74 | | These options configure the behavior of failed queue job logging so you
75 | | can control which database and table are used to store the jobs that
76 | | have failed. You may change them to any database / table you wish.
77 | |
78 | */
79 |
80 | 'failed' => [
81 | 'database' => env('DB_CONNECTION', 'mysql'),
82 | 'table' => 'failed_jobs',
83 | ],
84 |
85 | ];
86 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | ],
21 |
22 | 'ses' => [
23 | 'key' => env('SES_KEY'),
24 | 'secret' => env('SES_SECRET'),
25 | 'region' => 'us-east-1',
26 | ],
27 |
28 | 'sparkpost' => [
29 | 'secret' => env('SPARKPOST_SECRET'),
30 | ],
31 |
32 | 'stripe' => [
33 | 'model' => App\User::class,
34 | 'key' => env('STRIPE_KEY'),
35 | 'secret' => env('STRIPE_SECRET'),
36 | ],
37 |
38 | ];
39 |
--------------------------------------------------------------------------------
/config/session.php:
--------------------------------------------------------------------------------
1 | env('SESSION_DRIVER', 'file'),
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Session Lifetime
24 | |--------------------------------------------------------------------------
25 | |
26 | | Here you may specify the number of minutes that you wish the session
27 | | to be allowed to remain idle before it expires. If you want them
28 | | to immediately expire on the browser closing, set that option.
29 | |
30 | */
31 |
32 | 'lifetime' => 120,
33 |
34 | 'expire_on_close' => false,
35 |
36 | /*
37 | |--------------------------------------------------------------------------
38 | | Session Encryption
39 | |--------------------------------------------------------------------------
40 | |
41 | | This option allows you to easily specify that all of your session data
42 | | should be encrypted before it is stored. All encryption will be run
43 | | automatically by Laravel and you can use the Session like normal.
44 | |
45 | */
46 |
47 | 'encrypt' => false,
48 |
49 | /*
50 | |--------------------------------------------------------------------------
51 | | Session File Location
52 | |--------------------------------------------------------------------------
53 | |
54 | | When using the native session driver, we need a location where session
55 | | files may be stored. A default has been set for you but a different
56 | | location may be specified. This is only needed for file sessions.
57 | |
58 | */
59 |
60 | 'files' => storage_path('framework/sessions'),
61 |
62 | /*
63 | |--------------------------------------------------------------------------
64 | | Session Database Connection
65 | |--------------------------------------------------------------------------
66 | |
67 | | When using the "database" or "redis" session drivers, you may specify a
68 | | connection that should be used to manage these sessions. This should
69 | | correspond to a connection in your database configuration options.
70 | |
71 | */
72 |
73 | 'connection' => null,
74 |
75 | /*
76 | |--------------------------------------------------------------------------
77 | | Session Database Table
78 | |--------------------------------------------------------------------------
79 | |
80 | | When using the "database" session driver, you may specify the table we
81 | | should use to manage the sessions. Of course, a sensible default is
82 | | provided for you; however, you are free to change this as needed.
83 | |
84 | */
85 |
86 | 'table' => 'sessions',
87 |
88 | /*
89 | |--------------------------------------------------------------------------
90 | | Session Cache Store
91 | |--------------------------------------------------------------------------
92 | |
93 | | When using the "apc" or "memcached" session drivers, you may specify a
94 | | cache store that should be used for these sessions. This value must
95 | | correspond with one of the application's configured cache stores.
96 | |
97 | */
98 |
99 | 'store' => null,
100 |
101 | /*
102 | |--------------------------------------------------------------------------
103 | | Session Sweeping Lottery
104 | |--------------------------------------------------------------------------
105 | |
106 | | Some session drivers must manually sweep their storage location to get
107 | | rid of old sessions from storage. Here are the chances that it will
108 | | happen on a given request. By default, the odds are 2 out of 100.
109 | |
110 | */
111 |
112 | 'lottery' => [2, 100],
113 |
114 | /*
115 | |--------------------------------------------------------------------------
116 | | Session Cookie Name
117 | |--------------------------------------------------------------------------
118 | |
119 | | Here you may change the name of the cookie used to identify a session
120 | | instance by ID. The name specified here will get used every time a
121 | | new session cookie is created by the framework for every driver.
122 | |
123 | */
124 |
125 | 'cookie' => 'laravel_session',
126 |
127 | /*
128 | |--------------------------------------------------------------------------
129 | | Session Cookie Path
130 | |--------------------------------------------------------------------------
131 | |
132 | | The session cookie path determines the path for which the cookie will
133 | | be regarded as available. Typically, this will be the root path of
134 | | your application but you are free to change this when necessary.
135 | |
136 | */
137 |
138 | 'path' => '/',
139 |
140 | /*
141 | |--------------------------------------------------------------------------
142 | | Session Cookie Domain
143 | |--------------------------------------------------------------------------
144 | |
145 | | Here you may change the domain of the cookie used to identify a session
146 | | in your application. This will determine which domains the cookie is
147 | | available to in your application. A sensible default has been set.
148 | |
149 | */
150 |
151 | 'domain' => env('SESSION_DOMAIN', null),
152 |
153 | /*
154 | |--------------------------------------------------------------------------
155 | | HTTPS Only Cookies
156 | |--------------------------------------------------------------------------
157 | |
158 | | By setting this option to true, session cookies will only be sent back
159 | | to the server if the browser has a HTTPS connection. This will keep
160 | | the cookie from being sent to you if it can not be done securely.
161 | |
162 | */
163 |
164 | 'secure' => env('SESSION_SECURE_COOKIE', false),
165 |
166 | /*
167 | |--------------------------------------------------------------------------
168 | | HTTP Access Only
169 | |--------------------------------------------------------------------------
170 | |
171 | | Setting this value to true will prevent JavaScript from accessing the
172 | | value of the cookie and the cookie will only be accessible through
173 | | the HTTP protocol. You are free to modify this option if needed.
174 | |
175 | */
176 |
177 | 'http_only' => true,
178 |
179 | ];
180 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | realpath(base_path('resources/views')),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => realpath(storage_path('framework/views')),
32 |
33 | ];
34 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/database/factories/ModelFactory.php:
--------------------------------------------------------------------------------
1 | define(App\User::class, function (Faker\Generator $faker) {
16 | static $password;
17 |
18 | return [
19 | 'name' => $faker->name,
20 | 'email' => $faker->unique()->safeEmail,
21 | 'password' => $password ?: $password = bcrypt('secret'),
22 | 'remember_token' => str_random(10),
23 | ];
24 | });
25 |
26 | $factory->define(\App\Post::class, function (\Faker\Generator $faker) {
27 | return [
28 | 'name' => $faker->name,
29 | 'slug' => $faker->slug,
30 | 'content' => $faker->text,
31 | 'user_id' => function () {
32 | return factory(\App\User::class)->create()->id;
33 | }
34 | ];
35 | });
36 |
37 | $factory->define(\App\Category::class, function (\Faker\Generator $faker) {
38 | return [
39 | 'name' => $faker->name,
40 | 'slug' => $faker->slug
41 | ];
42 | });
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('name');
19 | $table->string('email')->unique();
20 | $table->string('password');
21 | $table->rememberToken();
22 | $table->timestamps();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('users');
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token')->index();
19 | $table->timestamp('created_at')->nullable();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('password_resets');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/database/migrations/2017_01_16_155729_create_categories_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('name');
19 | $table->string('slug');
20 | $table->integer('posts_count')->unsigned()->default(0);
21 | $table->timestamps();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | *
28 | * @return void
29 | */
30 | public function down()
31 | {
32 | Schema::dropIfExists('categories');
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2017_01_16_185338_create_posts_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->integer('category_id')->unsigned();
19 | $table->integer('user_id')->unsigned();
20 | $table->string('name');
21 | $table->string('slug');
22 | $table->longText('content');
23 | $table->timestamps();
24 |
25 | $table->foreign('category_id')->references('id')->on('categories');
26 | $table->foreign('user_id')->references('id')->on('users');
27 | });
28 | }
29 |
30 | /**
31 | * Reverse the migrations.
32 | *
33 | * @return void
34 | */
35 | public function down()
36 | {
37 | Schema::dropIfExists('posts');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/database/migrations/2017_01_17_133437_create_comments_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('username');
19 | $table->string('email');
20 | $table->integer('post_id')->unsigned();
21 | $table->longText('content');
22 | $table->timestamps();
23 | $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('comments');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/seeds/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call(PostTableSeeder::class);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/database/seeds/PostTableSeeder.php:
--------------------------------------------------------------------------------
1 | insertGetId([
18 | 'name' => 'admin',
19 | 'email'=> 'admin@localhost.dev',
20 | 'password' => \Illuminate\Support\Facades\Hash::make('admin')
21 | ]);
22 |
23 | for($i = 0; $i < 3; $i++) {
24 | $category_id = DB::table('categories')->insertGetId([
25 | 'name' => $faker->name,
26 | 'slug' => $faker->slug,
27 | 'posts_count' => 5
28 | ]);
29 | for($j = 0; $j < 5; $j++) {
30 | DB::table('posts')->insert([
31 | 'name' => $faker->name,
32 | 'slug' => $faker->slug,
33 | 'content' => $faker->text,
34 | 'created_at' => $faker->dateTime,
35 | 'updated_at' => $faker->dateTime,
36 | 'user_id' => $user_id,
37 | 'category_id' => $category_id
38 | ]);
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | const elixir = require('laravel-elixir');
2 |
3 | require('laravel-elixir-vue-2');
4 |
5 | /*
6 | |--------------------------------------------------------------------------
7 | | Elixir Asset Management
8 | |--------------------------------------------------------------------------
9 | |
10 | | Elixir provides a clean, fluent API for defining some basic Gulp tasks
11 | | for your Laravel application. By default, we are compiling the Sass
12 | | file for your application as well as publishing vendor resources.
13 | |
14 | */
15 |
16 | elixir((mix) => {
17 | mix.sass('app.scss')
18 | .webpack('app.js');
19 | });
20 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "prod": "gulp --production",
5 | "dev": "gulp watch"
6 | },
7 | "devDependencies": {
8 | "bootstrap-sass": "^3.3.7",
9 | "gulp": "^3.9.1",
10 | "jquery": "^3.1.0",
11 | "laravel-elixir": "^6.0.0-14",
12 | "laravel-elixir-vue-2": "^0.2.0",
13 | "laravel-elixir-webpack-official": "^1.0.2",
14 | "lodash": "^4.16.2",
15 | "vue": "^2.0.1",
16 | "vue-resource": "^1.0.3"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 |
56 |