Laravel - Мульти Сайт / Проект

В настоящее время я ищу фреймворк для поддержки моего нового фреймворка. Laravel, кажется, мой лучший выбор.

Я имею в виду очень специфическую структуру. Мой проект будет иметь базовый дизайн с общими моделями, представлениями и контроллерами, а также некоторые подпроекты с конкретными представлениями. Цель состоит в том, чтобы предоставить платформу для владельцев того же бизнеса, где мы предоставляем уникальный веб-сайт. Во многих случаях меняется только дизайн, а структура и компоненты остаются неизменными. Моя идея состояла в том, чтобы создать поддерживаемую структуру на laravel, из которой каждый сайт извлекает свои модели, контроллеры и представления, и, если есть особая необходимость, можно создать дополнительное представление.

Был ли у кого-то опыт с симулированным проектом в прошлом?

Я вижу некоторые основные препятствия:

  • Создание подпроектов
  • Использование нескольких подключений к базе данных
  • Использование моделей и видов из основного проекта

настройка проекта

1 ответ

Laravel очень гибок и легко настраивается, у вас не должно быть никаких проблем с такими вещами вообще. Что касается базы данных, например, вы можете создать два соединения: mainфиксированное соединение с вашими основными таблицами базы данных и project для таблиц текущего проекта, вот как это должно выглядеть:

'main' => [
    'driver' => 'pgsql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '5432'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'schema' => 'public',
    'sslmode' => 'prefer',
],

'project' => [
    'driver' => 'pgsql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '5432'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'schema' => 'public',
    'sslmode' => 'prefer',
],

И вы должны быть в состоянии:

Настройте модель подключения:

<?php

namespace App;

class Posts extends Model
{
    protected $connection = 'project';
}

Запросить соединения напрямую:

 DB::connection('project')->table('users')->where('activated', true)->get();

Настройте базу данных во время выполнения:

 config([
     'database.connections.project.database' => 'project1db',
     'database.connections.project.user' => $user, 
     'database.connections.project.password' => $password,
 ]);

Что касается представлений, вы можете сказать Laravel, что нужно искать представления там, где вам нужно, просто выполнив:

View::addLocation('/path/to/project1/');
Другие вопросы по тегам