Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#26 Re: Laravel 5.x » Как устранить file_exists(): open_basedir restriction in effect ? » 16.05.2018 21:11:26

Выяснил в чем была проблема. У меня в опенсервере была включена опция "Защитить сервер от внешнего доступа". Отключил и порядок.

#27 Re: Laravel 5.x » Откуда это взялось? passthru() has been disabled for security reasons » 16.05.2018 21:10:48

Выяснил в чем была проблема. У меня в опенсервере была включена опция "Защитить сервер от внешнего доступа". Отключил и порядок.

#28 Laravel 5.x » Как устранить file_exists(): open_basedir restriction in effect ? » 16.05.2018 20:59:01

Antuan
Ответов: 1

Ни с того ни с сего появилось несколько проблем с композером. Одна из них, это при попытке выполнить composer install пояаляется ошибка:

[ErrorException]
file_exists(): open_basedir restriction in effect. File(C:/Users/lubim/AppData/Local/Composer/.htaccess) is not within  the allowed path(s): (c:/ospanel/domains;c:/ospanel/userdata/temp;c:/ospanel/modules/system/html/openserver;c:/ospanel/modules/php/PHP-7.0;C:/Users/lubim/AppData/Roaming/Composer/.htaccess)

Может кто-то знает откуда это могло появиться? Раньше все было нормально. Я не припоминаю, чтобы я добавлял вручную файлы по адресу C:/Users/lubim/AppData/Local/Composer/.htaccess . Можно как-то выйти из положения не разрешая доступ к другим директориям? Например, удалить файл C:/Users/lubim/AppData/Local/Composer/.htaccess. Чем это чревато?

В настройках open-сервера использую конфигурацию:
HTTP - Apache-php-7
PHP - php 7.0
Mysql 5.7

Установлен laravel 5.5.*

#29 Laravel 5.x » Откуда это взялось? passthru() has been disabled for security reasons » 16.05.2018 20:42:55

Antuan
Ответов: 1

Попытался запустить composer update и получил вонинг

c:\OSPanel\domains\our_landing_pade_beta>composer require hisorange/browser-detect
Warning: passthru() has been disabled for security reasons in phar://C:/OSPanel/modules/php/PHP-7.0/composer.phar/src/Composer/XdebugHandler.php on line 101

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

В настройках open-сервера использую конфигурацию:
HTTP - Apache-php-7
PHP - php 7.0
Mysql 5.7

Установлен laravel 5.5.*

#30 Laravel 5.x » Как обеспечить уникальность записей при "пакетном" добавлении в БД? » 11.12.2017 23:08:06

Antuan
Ответов: 3

Загружаю в БД огромные таблицы из csv. Можно ли средствами mysql/eloquent отсекать повторяющиеся записи, если я для повышения производительности формирую и отправляю по одному запросу на 500 записей? Уникальность записей должна определяться по всем столбцам одновременно в рамках всего csv-документа или всей таблицы бд (каждый документ пишется в новую таблицу). Если в двух строках хоть в одном столбце строки (числа) отличаются, значит считаем, что записи уникальны и не повторяющиеся. Какой самый простой способ это сделать? array_unique($csv) не работает. Я из csv получаю тип данных, который не является массивом.

        
    $csv = Reader::createFromPath("$path)->setHeaderOffset(0); // использую эту библиотеку: thephpleague/csv

    foreach ($csv as $record) {
        $dataSet[] = [
            'table_column_1' => $record['col_1'];
            ...
            ...
        ];
    }
    DB::table($table)->insert($dataSet);

Я упростил этот фрагмент, чтобы не загромождать его лишним, убрал итерации по 500 записей и т.п.

#31 Re: Laravel 5.x » Как сформировать запрос к db если несколько where добавляются в цикле? » 24.11.2017 22:26:24

$where = array_combine($columns1, $filters1);

Фантастика в одну строку! smile
А как добиться похожего результата и для апдейта?

#32 Laravel 5.x » Как сформировать запрос к db если несколько where добавляются в цикле? » 24.11.2017 20:18:37

Antuan
Ответов: 3

У меня на вход в метод поступают четыре массива. Два $columns1[] и $columns2[], которые содержат имена столбцов. И два $filters1[] и $filters2[], которые содержат поисковые фильтры. Как можно перебирая в цикле значения этих столбцов, сформировать запрос к бд? Не могу сообразить как это делается через eloquent. То же самое касается и update.
Конечный запрос будет выглядеть примерно так:

$data::where($columns1[0], '=', $filters1[0])
            ->where($columns1[1], '=', $filters1[1])
            ...
            ->where($columns1[n], '=', $filters1[n])
            ...
            ->update($columns2[0] => $filters2[0],
                    $columns2[1] => $filters2[1],
                    ...
                    $columns2[n] => $filters2[n],

#33 Re: Laravel 5.x » как запретить регистрацию, но сохранить авторизацию? » 11.11.2017 22:42:24

переопредели метод register в RegisterController и поставь в него редирект на главную на всякий случай.

Переопределил два метода. Но не уверен, что этого достаточно, чтобы обеспечить безопасность.
    public function register(Request $request)
    {
        return redirect('/');
    }
    public function showRegistrationForm()
    {
        return redirect('/');
    }

#34 Laravel 5.x » как запретить регистрацию, но сохранить авторизацию? » 11.11.2017 18:58:52

Antuan
Ответов: 3

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

#35 Re: Laravel 5.x » Как открыть страницу view, но добавить к ней анкор? » 30.10.2017 00:15:30

Нужен именно редирект? Попробуй что-нибудь вроде:return redirect(url()->previous() . '#anchor');

Да, редирект работает. Но как мне теперь над формой показать сообщение о том, что заказ был успешно оформлен и спасибо за внимание? Мне ведь эту логику нужно в шаблоне закладывать. А как это сделать если я не передаю никакие параметры в шаблон, а просто редиректом открываю предыдущую страницу? Как сделать что-то одно: редирект или вывести сообщение, я знаю. А как сделать и то и другое по-отдельности, чето не догоняю.

#36 Re: Laravel 5.x » Смена всех путей в blade-шаблонах при переходе на хостинг » 29.10.2017 23:58:39

Не угадал, смена настроек на локалхосте никак не поможет.
Я понял почему возникла эта проблема. В настройках доменов локального сервера (опенсервер) я указывал папку mysite.com/public в качестве доменной директории. Соответственно локалхост знал где искать .htaccess, который лежал внутри /public/. Соответственно, внитри .htaccess нужно было указывать такой путь (т.к. .htaccess лежал вместе с index.php):
DirectoryIndex index.php.
RewriteRule ^ index.php [L]
При переходе же на хостинг у меня нет возможности указать доменную директорию. Поэтому я вынужден вынести .htaccess в корень, чтобы сервер мог его найти. А поскольку я его вынес, то теперь по отношению к нему, индексный файл размещается по другому адресу:
DirectoryIndex public/index.php.
RewriteRule ^ public/index.php [L]
Если я это сделаю, то сайт начинает работать, но я вынужден вручную менять все пути, везде дописывать /public/
Наверное точнее я не смогу сформулировать свою проблему. Подскажите пути решения.. Я застрял на ровном месте (((

#37 Re: Laravel 5.x » Смена всех путей в blade-шаблонах при переходе на хостинг » 29.10.2017 23:36:38

Может в данном случае мне нужно .htaccess вынести из public в корень и на локалхосте? И настроить пути так, чтобы все работало на локалхосте. Тогда при переносе на хостинг теоретически с адресами проблем не должно возникнуть? Сейчас попробую это сделать. Если нет, подскажите как это делается или ткните где об этом пишут.

#38 Re: Laravel 5.x » Смена всех путей в blade-шаблонах при переходе на хостинг » 29.10.2017 23:33:22

Тебе как раз нужно настроить веб сервер так, чтобы в URI не было public.

public то я убрал из .htaccess, но теперь сервер не видит мою точку входа public_html/public/index.php. Вся проблема в том, что на локалхосте .htaccess лежал в папке public и все было ОК,а теперь его пришлось вынести в корень, иначе сервер не может найти .htaccess (я так думаю).

#39 Re: Laravel 5.x » Смена всех путей в blade-шаблонах при переходе на хостинг » 29.10.2017 22:10:39

А какой именно пусть создает asset('css/slider.css')? Должен создавать что-то вроде https://website.com/css/slider.css

да, такой и создает, а мне нужно https://website.com/public/css/slider.css
Что-то мне подсказывает, что я неверно настроил .htaccess

#40 Re: Laravel 5.x » Смена всех путей в blade-шаблонах при переходе на хостинг » 29.10.2017 22:08:58

нужно использовать помощники вроде asset() для создания пути к JS, CSS, изображениям и пр. И помощники вроде public_path() для указани путей к файлам.

А, чет не внимательно прочитал, да, public_path() - это немного не то (хотя тоже спасибо, я о нем не знал). А вот asset не помог. У меня что на локалхосте путь к css был css/slider.css, что на хостинге. А должен был стать public/css/slider.css. Может я неправильно сконфигурировал .htaccess? У меня на локалхосте было:
DirectoryIndex index.php
RewriteRule ^ index.php [L]
А я исправил на:
DirectoryIndex public/index.php
RewriteRule ^ public/index.php [L]
и вкинул в корневую public_html хостинга.

#41 Re: Laravel 5.x » Смена всех путей в blade-шаблонах при переходе на хостинг » 29.10.2017 21:46:56

Изначально вместо прямых путей нужно использовать помощники вроде asset() для создания пути к JS, CSS, изображениям и пр.

У меня все пути написаны через asset, например:
href="{{asset('css/slider.css')}}"
Но это не помогло (должно было ведь помочь?). А вот насчет public_path() не знал, сейчас посмотрю что к чему.

#42 Re: Laravel 5.x » SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add ... » 29.10.2017 21:39:43

Измени время в названии файлов миграции так, чтобы сначала создалась таблица locations, потом clients и уже потом comments.

Так и есть:
/migrations/2017_10_27_213205_CreateLocationsTable.php
/migrations/2017_10_27_213314_CreateClientsTable.php
/migrations/2017_10_27_213401_CreateCommentsTable.php
Перед этим у меня действительно был неправильный порядок миграций. Но я тогда просто не смог их запустить по той же причине. После этого я не менял время, а пересоздал их в нужном порядке. В самой БД я удалил таблицу migrations, других таблиц не было. Может что-то закешировалось?

#43 Re: Laravel 5.x » Как открыть страницу view, но добавить к ней анкор? » 29.10.2017 21:27:52

Нужен именно редирект?

Вообще нет. Как правильнее будет сделать? Может это через роуты нужно разруливать как-то?

Попробуй что-нибудь вроде:

А это попробую, спасибо

#44 Laravel 5.x » SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add ... » 29.10.2017 20:59:26

Antuan
Ответов: 4

Есть три таблицы, две из них с внешними ключами:
Таблица comments
Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('client_id')->unsigned()->default('0');
            $table->foreign('client_id')->references('id')->on('clients')->onUpdate('cascade')->onDelete('cascade');
            $table->text('message');
            $table->timestamps();
        });
Таблица clients
Schema::create('clients', function (Blueprint $table) {
            $table->increments('id');
            $table->text('email');
            $table->text('name');
            $table->text('position')->nullable();
            $table->integer('location_id')->unsigned();
            $table->foreign('location_id')->references('id')->on('locations')->onUpdate('cascade')->onDelete('cascade');
            $table->timestamps();
        });
Таблица locations
   Schema::create('locations', function (Blueprint $table) {
            $table->increments('id');
            $table->text('ip');
            $table->text('country')->nullable();
            $table->text('department');
            $table->text('timezone');
            $table->timestamps();
        });
Фрагмент из контроллера
$comment = new Comment();
        $comment -> client() -> email = $request -> input('email');
        $comment -> client() -> name = $request -> input('name');
        $comment -> client() -> position = $request -> input('position');
        $comment -> message = $request -> input('message');
        $comment -> save();
При попытке добавить запись в эти таблицы получаю ошибку.
Текст ошибки
Illuminate \ Database \QueryException (23000)
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`landing`.`comments`, CONSTRAINT `comments_client_id_foreign` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into `comments` (`message`, `updated_at`, `created_at`) values (dfgdgdgdf, 2017-10-28 10:31:06, 2017-10-28 10:31:06))
Читал инфу по коду этой ошибки. Советуют проверить соответствие названий и типов внешних ключей. Ключи перепроверил, не смог найти косяк. Либо чего-то еще не знаю, либо чего-то не заметил. Подскажите если кто заметит косяк.
И еще один вопрос: я правильно понимаю, что при добавлении записи в таблицу clients (см. фрагмент из контроллера), автоматически заполнится соответствующая запись в таблице comments (колонка client_id)? Я полагаю это должен обеспечить метод onUpdate('cascade').

#45 Laravel 5.x » Смена всех путей в blade-шаблонах при переходе на хостинг » 29.10.2017 20:54:12

Antuan
Ответов: 9

Столкнулся с проблемой, что при переносе сайта на хостинг мне пришлось менять ссылки на все скрипты, изображения, шрифты. Причина возникновения проблемы в том, что весь проект закидывается в директорию public_html. Таким образом стили, например, теперь расположены здесь: public_html/public/css/..., а были расположены здесь: public/css/... Теперь при каждой правке шаблона приходится его заливать и каждый раз менять все эти пути. Как это вообще делается? И еще вопрос из той же серии, я все свои изменения заливаю вручную пофайлово. Как это делают профи? Спасибо.

#46 Laravel 5.x » Как открыть страницу view, но добавить к ней анкор? » 29.10.2017 20:43:43

Antuan
Ответов: 5

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

Подвал раздела