Laravel по-русски

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

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

#1 Laravel 5.x » Отрицательное влияние URL типа http://localhost:3000/ » 24.09.2018 05:06:06

Gleb2708
Ответов: 0

Я использую OpenServer, потому для каждого проекта у меня настроен свой виртульный хостинг типа http://exmaple.dev/. Только что настроил Live Reload с помощью Browser Sync:

gulp.task('Watch Laravel project by Browsersync', () => {

  browserSync.init({
    proxy: 'http://exmaple.dev/',
    watch: true
  });

  browserSync.watch(PROJECT_FILE_SYSTEM.LARAVEL_FILES_SELECTION_WILL_BE_WATCHED).on('change', browserSync.reload);
});

Теперь автоматическая перезагрузка доступна по адресу http://localhost:3000/. Если вывести URL типа

URL::current()

, то будет, естественно, //localhost:3000, а не http://exmaple.dev/. Вопрос такой: возможно ли какое-нибудь отрицательное влияние всвязи с этим? Вроде как Laravel прекрасно анализирует роуты и преобразует пути к абсолютным, но всё же.

#2 Re: Laravel 5.x » Зависание компьютера при выполнении SQL-запроса через Eloquent » 05.08.2018 06:52:48

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

#3 Laravel 5.x » Зависание компьютера при выполнении SQL-запроса через Eloquent » 05.08.2018 06:39:27

Gleb2708
Ответов: 2

При выполнении приведённого ниже SQL-запроса из Eloquent-модели компьютер зависает, потому что сервер Apache забирает все системные ресурсы. То есть эффект такой же, как и при запуске бесконечного цикла.

PHP
class PageVisit extends Model {

  public static function 
getFirstDataBaseRecordByIpAddress() {
    return 
self::where('IP_Address''123.4.5.6');
  }
}

Соединение с базой данных есть — всё нормально. Причём сначала всё работало, а потому при непонятных условиях перестало работать.

#4 Laravel 5.x » Тестирование: как проверить значения переменных в методе контроллера » 03.08.2018 16:10:27

Gleb2708
Ответов: 3

Впервые имею дело с юнит-тестами; основную документацию уже прочитал, тем не менее пока не понятно как сделать какие-то элементарные вещи. В этом простом с точки зрения логики тесте я бы хотел проверить, записались ли значения utm-параметров в соответствующие поля класса.

PHP
class TopPageController extends Controller {
  public function 
render(): void {
     
$this->utm_source request()->utm_source;
     
$this->utm_term request()->utm_term;
  }
}
PHP
class ExampleTest extends TestCase {

  public function 
exampleTest() {
    
$response $this->get('/?utm_source=google&utm_term=keyword1%20keyword2');
    
$this->assertTrue(/* В TopPageController->render() все значения переменных не пустые? */);
  }
}

С точки зрения PHP это нереалезуемо: в общем случае поля $this->utm_source и $this->utm_term не обязаны быть открытыми, потому в методе exampleTest() доступа к ним быть не должно. Тем не менее, эта проблема должна быть как-то решена в юнит-тестировании.

#5 Re: Laravel 5.x » Использование JSON&JSON5 для конфигурации: аспекты производительности » 02.08.2018 16:56:47

Благодарю Вас за ответ!

Я, должно быть, не совсем к месту применил слово "конфигурация". Правильнее было бы сказать не "конфигурация", а "статические строковые данные", такие как имена полей ввода в HTML-формах, имена таблиц и их колонок в базах данных и так далее. Смысл этого всего в том, чтобы избежать хардкодинга и чтобы изменение этих значений было быстрым и безболезненным. Вообще вопрос о том, как лучше организовать хранение этих данных, я вынес в отдельную тему, здесь же мы обсуждаем, будет ли проигрыш в производительности, если эти строковые данные хранить не в PHP-классах, как это организовано в конфигурации Laravel, а в удобных для человека файлах JSON, JSON5 и YAML.

#6 Laravel 5.x » Какие существуют хорошие практики для выноса статических данных? » 01.08.2018 02:14:25

Gleb2708
Ответов: 1

Я уделяю много внимания слежению за отсутствием хардкодинга и выношу статические данные (имена таблиц и их полей базы данных, имена полей ввода в html-формах, имена маршрутов и т. д.) в отдельные файлы. Хотел бы улучшить качество организации этих файлов и качество их написания. Что Вы можете порекомендовать почитать по данной теме?

#7 Laravel 5.x » Использование JSON&JSON5 для конфигурации: аспекты производительности » 01.08.2018 01:59:20

Gleb2708
Ответов: 2

Вижу, Laravel использует php-файлы для конфигурации (папка config). Но я бы хотел использовать более простой синтаксис для собственных конфигураций, и в первую очередь это JSON5. Какой проигрыш в производительности будет из-за чтения внешнего не-php файла и парсинга JSON?

#8 Laravel 5.x » Каким способом лучше делать SQL-запросы из Eloquent-модели? » 11.04.2018 16:50:11

Gleb2708
Ответов: 3

Известно, что запросы к БД можно делать через Eloquent-модель (всё реализовано в родительских классах). Но я бы хотел вынести все SQL-запросы из контроллера в модель, то есть делать запросы из самой Eloquent-модели, а в контроллер возвращать лишь готовые выборки данных по определённым параметрам.

На данный момент я думаю сделать запросы через фасад DB. Как ещё можно сделать запросы к БД из Eloquent-модели?

#9 Re: Laravel 5.x » Каково назначение папки Http? » 30.03.2018 16:50:47

Благодарю Вас за ответ! Значит, модели не следует хранить внутри HTTP, правильно?

#10 Laravel 5.x » Каково назначение папки Http? » 30.03.2018 15:35:52

Gleb2708
Ответов: 3

К созжалению, из названия папки Http в директории app неочевидно, зачем она нужна. Известно только то, что по умолчанию там хранятся контроллеры, посредники и kernel.php. Хотел бы это узнать истинное назначение папки Http для дальнейшей организации файлов проекта.

#11 Laravel 5.x » Laravel стал практически бесполезен из-за слишком высоких требований? » 24.03.2018 13:07:48

Gleb2708
Ответов: 5

Посмотрел новую документацию на Laravel и удивился: требуют чуть ли не самую новую версию PHP — PHP >= 7.1.3. А… как вообще обстоит дело с поддерживаемостью этой версии PHP на современных хостингах? Или это имеет значение только на стадии разработки? (хотя спрашивая, понимаю, что едва ли). Можно ли теперь продолжать делать сайты на свежей версии Laravel или он просто не будет работать ни на каких хостингах?

#12 Laravel 5.x » Имеет ли смысл выносить SQL-запросы из контроллера в модель? » 24.03.2018 12:12:12

Gleb2708
Ответов: 2

У меня в контроллере стало слишком много SQL-запросов. В смысле, самих запросов-то не так много, но они довольно длинные. Думаю о том, куда бы их лучше вынести из контроллера. Может, создать модель главной страницы и вынести туда?

Только убедительная просьба - не отвечайте абстрактно типа "это можно сделать самыми разными способами, всех и не перечесть". Пожалуйста, предложите конкретное решение, которое Вы считаете лучшим.

#13 Laravel 5.x » Можно ли использовать {{ }} в параметре url ajax-запроса? » 12.02.2018 07:08:37

Gleb2708
Ответов: 1

Когда я увидел приведённый ниже пример, то подумал, что в качестве параметра URL AJAX-запроса можно передавать выражения в двойных фигурных скобках, какие используются в blade-шаблонах:

$.ajax({
  type: "POST",
  url : "{{ url('/api/login') }}",
  contentType: 'application/json',
  dataType: 'json',
  data: JSON.stringify({
    user   : user,
    passwd : passwd
  })
  :
});

Я подумал, что раз laravel понимает {{ url() }}, то поймёт и {{ route() }}, и сделал такой запрос:

{{ route("admin.GetFragmentViaAjax", ["fragment" => "statistic_top"]) }}

Ошибка в консоли такая:

GET http://example.loc/%7B%7B 404 (Not Found)

Я думаю, с приведённым в начале вопроса примера какое-то недоразумение.

#14 Re: Поиск работы » Ищу работу, laravel или symfony » 06.02.2018 10:37:04

Предлагаю Вам работу на следующих условиях:

  • Удалённая работа; сколько времени работать в день – решайте сами при условии выполнения работы в срок.
  • Содержание работы: вёрстка и программирование лендингов; backend на Laravel-основе.
  • Каждый заказ будет включать в себя 3 страницы (две из них маленькие).
  • Все необходимые навыки у Вас есть: PHP/Laravel, HTML/CSS, JavaScript/jQuery
  • Оплата: 5 тысяч рублей за лендинг.
  • Можете сочетать эту работу с другими (опять же, при условии выполнения работы в срок). Оплата 5000 рублей по факту выполнения каждого проекта.

Пишите, если заинтересованы.
bokov.gleb142@gmail.com

#15 Re: Поиск работы » Ищу работу на Laravel » 06.02.2018 10:34:12

Предлагаю Вам работу на следующих условиях:

  • Удалённая работа; сколько времени работать в день – решайте сами при условии выполнения работы в срок.
  • Содержание работы: вёрстка и программирование лендингов; backend на Laravel-основе.
  • Каждый заказ будет включать в себя 3 страницы (две из них маленькие).
  • Все необходимые навыки у Вас есть: PHP/Laravel, HTML/CSS, JavaScript/jQuery
  • Оплата: 5 тысяч рублей за лендинг.
  • Можете сочетать эту работу с другими (опять же, при условии выполнения работы в срок). Оплата 5000 рублей по факту выполнения каждого проекта.

Пишите, если заинтересованы.
bokov.gleb142@gmail.com

#16 Re: Laravel 5.x » Прервать выполнение скрипта после return -> redirect() » 05.02.2018 10:20:16

abort(404); даст страницу Sorry, the page you are looking for could not be found., а это не то, что надо. Надо вернуться на главную страницу.

#17 Re: Laravel 5.x » Прервать выполнение скрипта после return -> redirect() » 04.02.2018 15:02:58

Благодарю Вас за ответ!

Честно, говоря, не совсем понимаю, зачем я return списал откуда-то перед redirect()… Перенаправление и без return будет же.

#19 Laravel 5.x » Прервать выполнение скрипта после return -> redirect() » 04.02.2018 04:50:10

Gleb2708
Ответов: 4

Метод с длинным, но однозначным названием abortRequestIfAnotherOneWithSameIdExistsInDatabase() должен прервать выполнение скрипта, если в БД будет зайдена запись с таким же ID визита сайта (то есть два запроса подряд за один визит сайта не позволено). return redirect() к прерыванию не приводит, и все методы после abortRequestIfAnotherOneWithSameIdExistsInDatabase() выполняются, чего быть не должно. Естественно, я не могу вставить exit; после return, так как всё, что после return, не будет выполнено.

Что можно сделать в качестве альтернативы?

PHP
<?php

    
public function submitConsultationRequest(){

        
$this -> abortRequestIfAnotherOneWithSameIdExistsInDatabase();
        
// другие методы
    
}

    private function 
abortRequestIfAnotherOneWithSameIdExistsInDatabase(){

        
$queryResult DB::table('requests') ->
            
where'visitId' => request() -> session() -> get('visitId'),
        ]) -> 
first();

        if (!
is_null($queryResult)) {
            return 
redirect() -> route('top');
        }
    }

#21 Re: Laravel 5.x » Как пускать на определённую страницу только тех кто отправил обр.связь » 03.02.2018 10:06:07

Редирект-то сделать можно, и я его делаю после успешной отправки сообщения, но нам нужно предотвратить то, чтобы кто-то, введя в поисковую строку соответствующий URL, попал на страницу благодарности — это может быть ошибочный засчёт конверсии.

И, кстати, я забыл добавить небольшой кусок кода в конец сообщения. Исправил это.

#22 Laravel 5.x » Как пускать на определённую страницу только тех кто отправил обр.связь » 03.02.2018 08:53:16

Gleb2708
Ответов: 7

Прошу прощения за заголовок — не хватило символов.

Как пропустить на страницу «Спасибо за заявку» только тех, кто заполнил и успешно отправил форму обратной связи?

Мои маршруты (актуальные в данном вопросе):

PHP
// Отправка заявки
Route::post('/submit-request', [
    
'as' => 'submitConsultationRequest',
    
'uses' => 'Open\FeedbackController@submitConsultationRequest'
]);

// Страинца благодарности
Route::get('/thanks', [
    
'as' => 'thanksForConsultationRequest',
    
'uses' => 'MainController@renderThanksForConsultationRequestPage'
]);

Если сделать это таким образом, как приведено ниже, то URL::previous() будет являться не post-запрос отправки сообщения (thanksForConsultationRequest), а URL той страницы, с которой произошла отправка сообщения.

PHP
if (URL::previous() !== URL::route('submitConsultationRequest')) {
    return 
redirect() -> back();
}

#23 Re: Laravel 5.x » Laravel 5.5 &OpenServer: не получается отправить почту с помощью gmail » 03.02.2018 05:14:40

Нашел решение. Нужно включить режиим пониженной безопасности на время теста из аккаунта Google.

#24 Laravel 5.x » Laravel 5.5 &OpenServer: не получается отправить почту с помощью gmail » 02.02.2018 16:13:38

Gleb2708
Ответов: 1

В одном из ответов на другой свой вопрос я узнал, что в версии Laravel, начиная с 5.5, драйвер mail больше недоступен. В попробовал рекомендуемые настройки (приведены ниже, но на этот раз другая ошибка:

stream_socket_enable_crypto() SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL
routines:ssl3_get_server_certificate:certificate verify failed

Настройки .env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myemail@gmail.com
MAIL_PASSWORD=somePassword1234
MAIL_ENCRYPTION=tls

Не знаю, влияет это или нет, но в Open Server я сделал такие же настройки.
С шифрованием SSL тоже не работает.

Обновление 1

На StackOverflow порекомендовали такое решение (добавить в файл config/mail.php)’:

'stream' => [
    'ssl' => [
        'allow_self_signed' => true,
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
]

С шифрованием TLS попытка отправки происходит, но выдаёт ошибку

Expected response code 250 but got code "535", with message "535-5.7.8 Username and Password not accepted.

С шифрованием ssl ошибка будет:

Expected response code 220 but got code "", with message ""

Обновление 2

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

#25 Re: Laravel 5.x » SQL-запрос в конструкторе класса-контроллера » 02.02.2018 09:29:06

Благодарю Всех за равёрнутые ответы, очень ценная информация!

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