Где находятся в Laravel файлы конфигурации работа с папкой config


Содержание материала:

пользовательские конфигурации доступ к файлам в фреймворк laravel 5 файлов config

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

Как я могу получить доступ к моей настройки с фреймворк Laravel файлы конфигурации?

Ответ 1

Сначала нужно добавить файл в папку config например: laravel\config\Test.php

затем вам нужно позвонить в конфиге

Ответ 2

Почему бы просто не использовать помощника в каждом конфигурационном файле нужно?

Вы просто должны установить значение в файле

и получить его на каждый файл конфигурации

Добавление пользовательского атрибута фреймворк Laravel / красноречивы модели на нагрузки?

лучшие практики для пользовательских помощников в фреймворк laravel 5

может кто-нибудь объяснить, что laravel 5.2 мульти auth с примером

как я называю модель в настраиваемый фреймворк laravel файл 5.3 конфиг?

как установить разрешения файла для что laravel?

один ассоциативный массив используется на всех контроллерах, в одном месте, чтобы определить это? — что laravel 5.3

ссылка — что означает эта ошибка означает в php?

где в git файл config —глобальные вам написал?

© 2020 — Вопросы и ответы по программированию

Laravel 5: где находится папка, в которой должны быть все мои контроллеры

13.02.2015, 15:20

где находится папка?
Это сообщение не потеме потому что я не знаю где написать но всётаки может кто знает где находится.

Где находится папка Skype в Ubuntu
Здравствуйте. Скажите пожалуйста где находится в Убунту папка заинсталлированного Скайпа, то есть.

Где находится папка с паролями к интернету?
Собираюсь переустановить винду, но понимаю, что пароли будут сброшены, где в памяти компьютера.

Определить где находится папка TEMP
вот есть пример, как определить папку темп на с# System.IO.Path.GetTempPath() но не могу найти как.

Где находится домашняя папка catalina?
При добавлении сервера apache tomcat в netbeans 7 он просит эту домашнюю папку где она находится .

Как изменить путь в конфиге laravel, если он находится в папке выше общедоступной?

У меня есть laravel 5 и файл конфигурации в папке config, а My css находится в папке ресурсов, которая находится на одном уровне с общей папкой, где находится index.php. Конфигурация виртуального хоста Apache рассматривает общую папку как корневой каталог сайта, но в этой ситуации я не могу объявить правильный путь от /public/index.php к папке ресурсов.

С одной стороны, я могу попробовать легкий путь и просто переместить общедоступную папку в корень laravel, но мне не нравится этот способ, есть идеи?

2 ответа

РЕДАКТИРОВАТЬ

Наиболее логичным является включение ваших таблиц стилей в общую папку. Если вам нужно стилизовать страницу, стиль в любом случае публичный. Так почему бы не положить в общую папку. Есть 2 варианта сделать это:

  1. Сделайте это вручную, просто копируя / перемещая файлы
  2. Используйте автоматизированный инструмент, такой как Glix или собственный Elixir от Laravel, который обеспечивает действительно простой способ копирования ваших активов.

Загрузка и управление файлами с Laravel и Vue

Что мы строим

На этот раз мы напишем просто сервис, который позволит загружать и управлять файлами. Итоговый пример:

Подготовка

Для начала измените эти директивы в php.ini :

upload_max_filesize = 200m
post_max_size = 250m

И добавьте эти зависимости в package.json :

«devDependencies»: <
«axios»: «^0.17»,
«bootstrap-sass»: «^3.3.7»,
«cross-env»: «^5.1»,
«jquery»: «^3.2»,
«laravel-mix»: «^1.0»,
«lodash»: «^4.17.4»,
«vue»: «^2.5.7»
>,
«dependencies»: <
font-awesome»: «^4.7.0»
>

Топ-пост этого месяца:  Как добавить товар в OpenCart

А так же измените webpack.min.js :

let mix = require(‘laravel-mix’);
mix.options( <
processCssUrls: false
>);
mix.js(‘resources/assets/js/app.js’, ‘public/js’)
.sass(‘resources/assets/sass/app.scss’, ‘public/css’)
.sass(‘resources/assets/sass/font-awesome.scss’, ‘public/css’);

Настроте пути для font-awesome.scss и подключите их:

// Fonts
$fa-font-path: «../fonts/vendor/font-awesome»;
@import ‘

Так же импортируйте bulma в app.scss :

Остальные стили вы можете взять на Github.

Внимание!

Вы можете столкнуться с трудностями если вы используете MariaDB в качестве базы данных. Чтобы избежать проблем, добавьте в AppServiceProvider код:


public function boot()
<
Schema::defaultStringLength(191);
>

И пока не забыли, нужно создать symlink на папку storage/app/publiс/ , сделать это можно с помощью команды:

php artisan storage:link

Теперь вы можете использовать хелпер assets для генерации URL:

Мы будем использовать дефолтовую авторизацию Laravel, так что выполните команду:

php artisan make:auth

Маршруты

Добавьте эти строки в самый конец файла web.php :

База данных

Создайте модель, контроллер и миграцию с помощью команды:

php artisan make:model File -mc

Оставьте create_users_table и create_passwords_table миграции без изменений. И измените миграцию create_files_table:

public function up()
<
Schema::create(‘files’, function (Blueprint $table) <
$table->increments(‘id’);
$table->string(‘name’)->unique();
$table->string(‘type’);
$table->string(‘extension’);
$table->integer(‘user_id’)->unsigned();
$table->timestamps();

Измените файл модели File.php :

class File extends Model
<

protected $fillable = [
‘name’, ‘type’, ‘extension’, ‘user_id’
];

public function user()
<
return $this->belongsTo(User::class);
>
>

Контроллер

У нас есть 2 контроллера — MainController:

class MainController extends Controller
<
public function index()
<
return view(‘main’);
>
>

и FileController:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use App;
use App\File;

class FileController extends Controller
<
private $image_ext = [‘jpg’, ‘jpeg’, ‘png’, ‘gif’];
private $audio_ext = [‘mp3’, ‘ogg’, ‘mpga’];
private $v ];
private $document_ext = [‘doc’, ‘docx’, ‘pdf’, ‘odt’];

/**
* Constructor
*/
public function __construct()
<
$this->middleware(‘auth’);
>

/**
* Fetch files by Type or Id
* @param string $type File type
* @param integer $id File Id
* @return object Files list, JSON
*/
public function index($type, $ > <
$model = new File();

if (!is_null($id)) <
$response = $model::findOrFail($id);
> else <
$records_per_page = ($type == ‘video’) ? 6 : 15;

$files = $model::where(‘type’, $type)
->where(‘user_id’, Auth::id())
->orderBy(‘id’, ‘desc’)->paginate($records_per_page);

$response = [
‘pagination’ => [
‘total’ => $files->total(),
‘per_page’ => $files->perPage(),
‘current_page’ => $files->currentPage(),
‘last_page’ => $files->lastPage(),
‘from’ => $files->firstItem(),
‘to’ => $files->lastItem()
],
‘data’ => $files
];
>

/**
* Upload new file and store it
* @param Request $request Request with form data: filename and file info
* @return boolean True if success, otherwise — false
*/
public function store(Request $request)
<
$max_size = (int)ini_get(‘upload_max_filesize’) * 1000;
$all_ext = implode(‘,’, $this->allExtensions());

$this->validate($request, [
‘name’ => ‘required|unique:files’,
‘file’ => ‘required|file|mimes:’ . $all_ext . ‘|max:’ . $max_size
]);

$model = new File();

$file = $request->file(‘file’);
$ext = $file->getClientOriginalExtension();
$type = $this->getType($ext);

if (Storage::putFileAs(‘/public/’ . $this->getUserDir() . ‘/’ . $type . ‘/’, $file, $request[‘name’] . ‘.’ . $ext)) <
return $model::create([
‘name’ => $request[‘name’],
‘type’ => $type,
‘extension’ => $ext,
‘user_id’ => Auth::id()
]);
>

/**
* Edit specific file
* @param integer $id File Id
* @param Request $request Request with form data: filename
* @return boolean True if success, otherwise — false
*/
public function edit($id, Request $request)
<
$file = File::where(‘id’, $id)->where(‘user_id’, Auth::id())->first();

if ($file->name == $request[‘name’]) <
return response()->json(false);
>

$this->validate($request, [
‘name’ => ‘required|unique:files’
]);

$old_filename = ‘/public/’ . $this->getUserDir() . ‘/’ . $file->type . ‘/’ . $file->name . ‘.’ . $file->extension;
$new_filename = ‘/public/’ . $this->getUserDir() . ‘/’ . $request[‘type’] . ‘/’ . $request[‘name’] . ‘.’ . $request[‘extension’];

if (Storage::disk(‘local’)->exists($old_filename)) <
if (Storage::disk(‘local’)->move($old_filename, $new_filename)) <
$file->name = $request[‘name’];
return response()->json($file->save());
>
>

/**
* Delete file from disk and database
* @param integer $id File Id
* @return boolean True if success, otherwise — false
*/
public function destroy($id)
<
$file = File::findOrFail($id);

if (Storage::disk(‘local’)->exists(‘/public/’ . $this->getUserDir() . ‘/’ . $file->type . ‘/’ . $file->name . ‘.’ . $file->extension)) <
if (Storage::disk(‘local’)->delete(‘/public/’ . $this->getUserDir() . ‘/’ . $file->type . ‘/’ . $file->name . ‘.’ . $file->extension)) <
return response()->json($file->delete());
>
>

/**
* Get type by extension
* @param string $ext Specific extension
* @return string Type
*/
private function getType($ext)
<
if (in_array($ext, $this->image_ext)) <
return ‘image’;
>

if (in_array($ext, $this->audio_ext)) <
return ‘audio’;
>

if (in_array($ext, $this->video_ext)) <
return ‘video’;
>

if (in_array($ext, $this->document_ext)) <
return ‘document’;
>
>

/**
* Get all extensions
* @return array Extensions of all file types
*/
private function allExtensions()
<
return array_merge($this->image_ext, $this->audio_ext, $this->video_ext, $this->document_ext);
>

/**
* Get directory for the specific user
* @return string Specific user directory
*/
private function getUserDir()
<
return Auth::user()->name . ‘_’ . Auth::id();
>
>

В этом контроллере есть четыре массива с расширениями файлов, которые используются для валидации. Вы можете расширить этот список.

В конструкторе мы определяем middleware для этого контроллера.

В методе index мы вытаскиваем все файлы с определенным типом и ID пользователя используя метод paginate . Затем подготавливаем и возвращаем ответ в JSON формате:

$response = [
‘pagination’ => [
‘total’ => $files->total(),
‘per_page’ => $files->perPage(),
‘current_page’ => $files->currentPage(),
‘last_page’ => $files->lastPage(),
‘from’ => $files->firstItem(),
‘to’ => $files->lastItem()
],
‘data’ => $files
];


В методе store, мы загружаем файл и создаем новую запись в базе данных для этого файла. Но сначала мы задачем переменные $max_size и $all_ext для валидации размера файла и его типа:

$max_size = (int)ini_get(‘upload_max_filesize’) * 1000;
$all_ext = implode(‘,’, $this->allExtensions());

Правила валидации достаточно простые. Поле name — обязательно и уникально. Поле file — должно быть файлом, файл должен иметь разрешенный тип, и не должен превышать $max_size размер:

$this->validate($request, [
‘name’ => ‘required|unique:files’,
‘file’ => ‘required|file|mimes:’ . $all_ext . ‘|max:’ . $max_size
]);

Далее мы получаем информацию о файле (тип и расширение):

$file = $request->file(‘file’); $ext = $file->getClientOriginalExtension();
$type = $this->getType($ext);

И после всего, мы можем загрузить файл (используя File Storage) в персональную директорию пользователя (storage/public/// ). Если все прошло успешно — мы создаем запись в базе данных:

if (Storage::putFileAs(‘/public/’ . $this=>getUserDir() . ‘/’ . $type . ‘/’, $file, $request[‘name’] . ‘.’ . $ext)) <
return $model::create([
‘name’ => $request[‘name’],
‘type’ => $type,
‘extension’ => $ext,
‘user_id’ => Auth::id()
]);
>

Вы можете изменить имя файла в методе edit. Новое имя должно отличаться от старого, и должно быть уникально. Далее мы проверяем существует ли файл с таким именем, и если да, то переименовываем его и обновляем в базе данных:

Топ-пост этого месяца:  Google начал правильно кэшировать содержимое сайтов из mobile-first

if (Storage::disk(‘local’)->exists($old_filename)) <
if (Storage::disk(‘local’)->move($old_filename, $new_filename)) <
$file->name = $request[‘name’];
return response()->json($file->save());
>
>

Остальные методы достаточно просты, так что вы можете разобрать их самостоятельно.

Шаблоны

У нас есть всего несколько шаблонов: главный, авторизация и layouts.

Как редактировать и сохранять пользовательские файлы конфигурации в Laravel?

Я создаю простое веб-приложение в Laravel 4. У меня есть бэкенд для управления контентом приложений. В качестве части бэкэнда я хочу иметь пользовательский интерфейс для управления настройками приложений. Я хочу, чтобы мои переменные конфигурации были сохранены в файле [FOLDER: /app/config/customconfig.php ].

Мне было интересно, есть ли какая-нибудь возможность в Laravel, как иметь пользовательский файл конфигурации, которым можно управлять/обновлять через пользовательский интерфейс бэкэнда?

3 ответа

Вам нужно будет расширить Fileloader, но это очень просто:

Я сделал это так.

Afiak нет встроенных функций для управления конфигурационными файлами. Для этого я вижу 2 варианта:

  • Вы можете сохранить свою конфигурацию в своей базе данных и переопределить конфигурацию по умолчанию во время выполнения с помощью Config::set(‘key’, ‘value’); . Но имейте в виду, что

Значения конфигурации, установленные во время выполнения, устанавливаются только для текущего запроса и не переносятся на последующие запросы. @see: http://laravel.com/docs/configuration

  • Так как файлы конфигурации — это простые php-массивы, их легко читать, манипулировать и писать их. Поэтому с небольшим пользовательским кодом это должно быть сделано быстро.

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

Как добавить пользовательский файл конфигурации в app /config в Laravel 5?

Я хочу добавить custom_config.php в каталог app /config моего проекта Laravel 5, но могу: Не найти ни одной статьи, объясняющей этот процесс. Как это сделать?

1 ответ

Вы можете легко добавить новый файл в папку конфигурации. Этот файл должен возвращать значения конфигурации. Проверьте другие файлы конфигурации для справки. Скажите, что constants.php похоже на

Теперь вы можете получить доступ к этому файлу конфигурации из любого места, используя фасад Config или глобальный config() . функционировать так

Как добавить пользовательский конфигурационный файл в приложение / конфигурации в Laravel 5?

Я хочу , чтобы добавить custom_config.php в приложение / конфигурационный каталог моего проекта Laravel 5, но не может найти любую статью , описывающую этот процесс. Как это делается?

Вы можете легко добавить новый файл в папку конфигурации. Этот файл должен возвращать значение конфигурации. Проверьте другие конфигурационные файлы для справки. Скажем constants.php , как так

Теперь вы можете получить доступ к этой конфигурационный файл из любого места либо с помощью Config Facade или config() глобальную функцию , как так

Где находятся конфигурационные файлы самых популярных CMS

У многих пользователей возникает вопрос, при настройке CMS, ГДЕ НАХОДИТСЯ ФАЙЛ С НАСТРОЙКАМИ для подключения к базе данных? Самая большая проблема заключается в том, что у всех движков (CMS) конфигурационный файл находится в разных местах, поэтому если пользователь не знаком близко с CMS, которая у него установлена или которую он переносит в другое место и хочет настроить подключение к БД то могут возникнуть проблемы с поиском конфигурационного файла для настройки подключения к БД.

Итак давайте рассмотрим самые популярные CMS и то где у них расположены конфигурационные файлы.

Конфигурационный файл WordPress

Файл с настройками для подключения к БД у wordpress находится в корне (в папке с движком) и называется: wp-config.php

Конфигурационный файл Joomla

Файл с настройками для подключения к базе данных Joomla находится в папке с Joomla

Имя конфигурационного файла: configuration.php

Конфигурационный файл DLE

Файл с настройками для CMS DLE находится по адресу: engine/data/dbconfig.php

Имя файла как вы уже поняли: dbconfig.php

Конфигурационный файл Drupal

Файл находится по адресу: sites/default/settings.php


Файл называется: settings.php

Конфигурационный файл phpBB

Файл находится в той же папке что и сама CMS и называется: config.php

Конфигурационный файл vBulletin

Файл размещен по адресу: includes/config.php и называется config.php

Конфигурационный файл vBulletin

Файл размещен по адресу: ./ conf_global.php и называется conf_global.php

Конфигурационный файл Magento

Файл находится по адресу: app/etc/local.xml и файл называется local.xml

Конфигурационный файл CS-Cart

Файл размещен в директории сайта и называется: config.local.php

Конфигурационный файл MODx

Файл с настройками для подключения к БД находится по адресу: /manager/includes/config.inc.php

Конфигурационный файл Typo3

Файл с настройками для подключения к БД у CMS Typo3 находится в папке typo3conf и называется localconf.php

Конфигурационный файл NetCat

Сам файл находится в папке netcat, которая находится в корне CMS и называется vars.inc.php

Конфигурационный файл Image CMS

Файл находится по адресу: /application/config/config.php

Файл как вы видите называется: config.php

Конфигурационный файл Bitrix

Файл находится в папке: /bitrix/php_interface/dbconn.php

Имя файла: dbconn.php

Конфигурационный файл WebAsyst

Файл находится по адресу: kernel/wbs.xml и dblist/КЛЮЧ_БАЗЫ_ДАННЫХ.xml

Первый файл называется: wbs.xml

Второй файл называется: КЛЮЧ_БАЗЫ_ДАННЫХ.xml

Все о WEB программировании

WEB программирование от А до Я

Заказать сайт:

Социальные сети:

Партнеры:

Laravel: работа с файлами – просмотр и удаление файлов

Доброго времени суток. В прошлой статье мы с вами рассмотрели как загружать файлы в Laravel. Но просто загружать файлы не интересно. Хотелось бы научиться просматривать файлы и удалять их методами Laravel. В данной статье мы и разберемся как это делать.

Первое, что нам необходимо сделать – это настроить место хранения наших файлов (storage)

Настройка файловой системы

Все настройки для файловых систем находятся в config/filesystems.php. Откроем этот файл, нас интересует элемент массива «disks». Добавим в него следующий код:

Топ-пост этого месяца:  Как получить записи не прикрепленные к таксономии

Как вы помните, картинки у нас хранятся в storage/images.

Контроллер для работы с файлами: просмотр и удаление

Контроллер, который отвечает за роботу с файлами называется UploadController (из статьи «Загрузка файлов в Laravel»). Данный контроллер содержит два метода:

  • Метод отображения формы для загрузки файлов – getForm
  • Метод, который отвечает непосредственно за загрузку файлов – upload

Нам необходимо добавить еще два метода:

  • getFiles – метод, который будет получать все файлы, которые хранятся в нашем storage
  • delete – метод, который удаляет файл

Открываем наш контроллер app/Http/Controllers/UploadController.php и добавляем эти методы:

Теперь нам нужно создать вьюшку files.blade.php

Создание view для отображения файлов

В папке resources/views создадим файл files.blade.php и добавим в него следующий код:

Осталось только добавить роуты.


Создание роутов

Открываем файл routes/web.php и добавляем в него следующий код:

Переходим /upload/all (в моем случае http://test.loc/upload/all).

И проверим папку где хранятся наши картинки.

Теперь давайте удалим этот файл, заходим /upload/all (в моем случае http://test.loc/upload/all) и жмем по ссылке «Удалить» напротив названия файла.

Как видим, файл удален и у нас больше нет файлов.

Давайте проверим папку. Как видите папка пуста

Отлично. Мы с вами разобрали как с помощью Laravel просмотреть файлы в папке и как их удалить.

Не забываем подписаться, чтобы не пропустить выхода новых статей: VK, Facebook, Twitter

Laravel: работа с файлами – просмотр и удаление файлов

Доброго времени суток. В прошлой статье мы с вами рассмотрели как загружать файлы в Laravel. Но просто загружать файлы не интересно. Хотелось бы научиться просматривать файлы и удалять их методами Laravel. В данной статье мы и разберемся как это делать.

Первое, что нам необходимо сделать – это настроить место хранения наших файлов (storage)

Настройка файловой системы

Все настройки для файловых систем находятся в config/filesystems.php. Откроем этот файл, нас интересует элемент массива «disks». Добавим в него следующий код:

Как вы помните, картинки у нас хранятся в storage/images.

Контроллер для работы с файлами: просмотр и удаление

Контроллер, который отвечает за роботу с файлами называется UploadController (из статьи «Загрузка файлов в Laravel»). Данный контроллер содержит два метода:

  • Метод отображения формы для загрузки файлов – getForm
  • Метод, который отвечает непосредственно за загрузку файлов – upload

Нам необходимо добавить еще два метода:

  • getFiles – метод, который будет получать все файлы, которые хранятся в нашем storage
  • delete – метод, который удаляет файл

Открываем наш контроллер app/Http/Controllers/UploadController.php и добавляем эти методы:

Теперь нам нужно создать вьюшку files.blade.php

Создание view для отображения файлов

В папке resources/views создадим файл files.blade.php и добавим в него следующий код:

Осталось только добавить роуты.

Создание роутов

Открываем файл routes/web.php и добавляем в него следующий код:

Переходим /upload/all (в моем случае http://test.loc/upload/all).

И проверим папку где хранятся наши картинки.

Теперь давайте удалим этот файл, заходим /upload/all (в моем случае http://test.loc/upload/all) и жмем по ссылке «Удалить» напротив названия файла.

Как видим, файл удален и у нас больше нет файлов.

Давайте проверим папку. Как видите папка пуста

Отлично. Мы с вами разобрали как с помощью Laravel просмотреть файлы в папке и как их удалить.

Не забываем подписаться, чтобы не пропустить выхода новых статей: VK, Facebook, Twitter

Как изменить путь в конфигурации laravel, если он находится в верхней папке, затем общедоступной?

У меня есть laravel 5 и файл конфигурации в папке config, а My css находится в папке ресурсов, которая находится на одном уровне с общей папкой, где находится index.php. Виртуальный хост Apache config смотрит в общую папку как корневой каталог сайта, но в этой ситуации я не могу объявить правильный путь из /public/index.php в папку ресурсов.

С одной стороны я могу попробовать простой способ и просто переместить общую папку в корень laravel, но мне это не нравится, любые идеи?

Создан 13 янв. 17 2020-01-13 14:36:13 Nesquik27

Какова связь с менеджером пакетов Nix? Почему это в ваших тегах? – Zimm i48 13 янв. 17 2020-01-13 16:30:49

О, извините, я не читал описания этого тега, я думал, что это всего лишь системы операций nix, а не менеджер пакетов 🙂 – Nesquik27 14 янв. 17 2020-01-14 03:38:43

2 ответа

EDIT

Наиболее логичным является включение таблицы стилей в вашей общей папке, хотя. Если вам нужно стилизовать страницу, стиль будет общедоступным. Так почему бы не поместить в общую папку. Там же 2 варианта сделать это:

  1. сделать это вручную с помощью простого копирования/перемещения файлов
  2. Используйте автоматизированный инструмент, как Глоток или Laravel собственного Elixir, которая обеспечивает очень простой способ для копирования ваших активов.

Создан 13 янв. 17 2020-01-13 14:38:18 Loek

думает! похоже, это работает и легко! – Nesquik27 13 янв. 17 2020-01-13 14:52:49

Нет проблем! Пожалуйста, пометьте как ответ, чтобы другие люди могли воспользоваться 🙂 – Loek 13 янв. 17 2020-01-13 14:53:14

Файлы по-прежнему не являются общедоступными. Вы не сможете загружать, скажем, стили в представлении, если у вас их нет в общедоступном каталоге. Идея, лежащая в папке ресурсов, заключается в том, что там есть редактируемые файлы CSS/SASS/JS, которые затем скомпилированы в один минитипированный файл с помощью скрипта gulp. – devk 13 янв. 17 2020-01-13 14:56:23

Обновлено мой ответ – Loek 13 янв. 17 2020-01-13 15:02:02

Добавить комментарий