Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Стоит ли избегать хранения содержимого тэгов (например, <title>, <meta name="description">, <meta name="Keywords">) в базе данных в случае с Laravel?
С точки зрения удобства, такой подход лучше, чем хранить приведённые выше данные в контроллерах, так как они предназначены для описания логики. Хранить эти данные в шаблонах будет лучше с точки зрения производительности, но тогда эти данные нельзя будет редактировать из админ-панели.
Обращение к базе данных в самом начале загрузки страницы должно отрицательно сказаться на производительности. Я знаю, что в Laravel для этого есть кэширование, но тем не менее, есть ли причины, по которым стоит избегать хранения содержимого мета-тэгов в БД?
Из-за ограничения максимальной длины заголовка темы не смог сформулировать вопрос достаточно точно. Если же быть точнее, то вопрос будет "Как сделать редирект со страницы "Спасибо за заявку", если на неё пришли НЕ со страницы с формой заявки?".
На данный момент у меня такие маршруты:
// Страница с формой
Route::get('/feedback', [ 'as' => 'feedback',
'uses' => 'FeedbackController@renderFeedbackPage']);
// Отправить заявку
Route::post('/feedback', [ 'as' => 'sendFeedback',
'uses' => 'FeedbackController@sendFeedback']);
// Страница "Спасибо за заявку"
Route::get('/thanks', [ 'as' => 'thanks',
'uses' => 'FeedbackController@renderThanksPage']);
Если введённые данные будут валидны, произойдёт перенаправление на страницу `/thanks`. Однако, на неё можно прийти и по-другому, например, введя соответствующий URL в адресную строку. Это недопустимо, т. к. произойдёт ложный зачёт конверсии. Как сделать редирект со страниы `/thanks`, если на неё пришли не со страницы формы после успешной валидации?
Допустим, мы хотим спросить через форму ввода у пользователя хотя бы один из двух контактов: телефон и/или адрес электронной почты. Это значит, что в правилах валидации будет правило required_without для обоих полей:
$this->validate($request, [
'email' => 'required_without:tel|email',
'tel' => 'required_without:email|regex:/(01)[0-9]{9}/'
], $messages);
Нам необходимо валидировать формат данных только тогда, когда они введены, но в коде выше формат проверяется всегда. Поскольку нам нужно знать хотя бы один контакт, то правило sometimes не подходит.
Благодарю Вас за ответ!
В результате экспериментов я-таки все миграции сделал, но причину предыдущих неудач не установил, потому пока не могу сказать, помогло ли Ваше решение. Если появится новая информация, я снова отпишусь в данной теме.
У меня есть две миграции по умолчанию (
2014_10_12_000000_create_users_table
и
2014_10_12_100000_create_password_resets_table
) и ещё одна собственная:
class CreatePagesTable extends Migration {
public function up() {
Schema::create('pages', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('title');
$table->text('metadesc');
$table->text('keywords');
});
}
public function down() {
Schema::dropIfExists('pages');
}
}
Когда я попытался сделать миграцию в первый раз, в консоли было:
> php artisan migrate
Migration table created successfully.
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max ke
y length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max ke
y length is 767 bytes
Таблицы pages при этом в БД не появилось. Эксперимента ради я решил попробовать ещё раз сделать миграцию, и тогда получил
[Illuminate\Database\QueryException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists (SQL
: create table `users` (`id` int unsigned not null auto_increment primary key, `name` varc
har(191) not null, `email` varchar(191) not null, `password` varchar(191) not null, `remem
ber_token` varchar(100) null, `created_at` timestamp null, `updated_at` timestamp null) de
fault character set utf8mb4 collate utf8mb4_unicode_ci)
[PDOException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists
Однако, когда я попробовал сделать откат, то получил
> php artisan migrate:rollback
Nothing to rollback.
> php artisan migrate:reset
Nothing to rollback.
Я пробовал это решение, безрезультатно:
public function boot()
{
Schema::defaultStringLength(191);
}
Я хочу понять причину происходящего.
Данные моих инструментов:
Laravel Framework 5.4.22
Apache PHP-7
MySQL - 5.5
После крафтинга проекта, в webpack.mix.js мы увидим лишь следующий код:
const { mix } = require('laravel-mix');
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css');
Как запускать development и production-сборку, я понял. Но что, если я хочу, например, чтобы sass-файлы компилировались в разные директории в зависимости от типа сборки?
Более конкретный пример. Пусть, у нас такая структура проекта:
public
|_ css-prod
resources
|_ assets
|_ sass
|_css-dev
Я хочу, чтобы при development-сборке файлы из resources/assets/sass компилировались в resources/assets/css-dev, а при продакшен - из resources/assets/sass compile в resources/assets/css-prod. Где и как определить соответвующие настройки?
Lavarel-Mix порадовал простотой своего синтаксиса, но и тут же породил кучу вопросов. Первый: как скомпилировать все sass-файлы, не указывая их явно в webpack.mix.js? В gulp это делается так:
gulp.task('sass', function(){
return gulp.src('development/sass/*.+(sass|scss)')
.pipe(sass())
.pipe(gulp.dest('development/css'))
});
Видил на Laracasts подобное:
mix.sass('back/back-theme.scss', './public/css/back.css')
.sass('front/custom.scss', './public/css/custom.css');
Не бред ли это для эпохи юзабилити?
Только узнал, что Elixir больше не в теме. Laravel Mix привлёк своим синтаксисом, но и породил кучу вопросов по настройке. Покопавшись в интернете я стал понимать, что едва ли mix полностью кастомизируем как gulp. Можно ли например скомпилировать разом все sass-файлы, не прописывая каждый из них? Так что желание использовать пользовательские настройки gulp и webpack только возрасло, хотя конечно, возможность разрабатывать всё на единой кодовой базе привлекательна.
Как Вы знаете, в Laravel-проекте уже есть настройки package.json и webpack.mix.js для использования средств front-end разработки. Но я хочу самостоятельно настроить webpack, gulp и другие npm-пакеты, и в дальнейшем использовать их без средства `elixir`. Мне нужно, чтобы всё, что в Laravel уже есть по умолчанию, мне не мешалось при работе с консольными командами webpack и gulp-тасками.
Как следует поступить? Будет ли достаточно заменить `package.json` на свой собственный, удалить `webpack.mix.js` и добавить `webpack.config.js` перед инициализацией проекта командой `npm i`?
P. S. Я знаю, что на момент начала разработки в Laravel-проекте фронт-енд часть уже должна быть готова, но Вы прекрасно знаете, что современный сайт нуждается в постоянной модификации.
Как Вы знаете, при конфигурации настроек работы с БД по умолчанию с помощью таких методов, как all(), select() и т. д. мы получаем объект, который затем можем отправить в blade-шаблон и отобразить данные из каждой строки таблицы через @foreach. Но что если я хочу отобразить данные только из одной строки таблицы, но при этом не хочу присваивать значению каждого поля имя отдельной переменной и передавать их по одной в шаблон?
$userData = User::first(['name','gender','avatar'])->get();
return view('top')->with(['userData'=>$userData]);
При попытке сделать как я показал выше у меня, во-первых, выбрались все поля таблицы, а не указанные, но самое главное, что в шаблоне не могу получить значения таким образом, как $userData=>name. Какие альтернативы можно предложить?
Допустим, мы разрабатываем админ-панель. Индексной страницей у нас, естественно, будет вход в систему.
Но нам нужно вводить логин и пароль только тогда, когда панель уже выложена в интернет и введена в эксплуатацию, а во время разработки каждый раз вводить логин и пароль для просмотра внутренних страниц сайта - не сахар.
Что-нибудь можно предпринять в Laravel кроме того, чтобы отложить разработку системы аутентификации пользователя на последний момент?
В идеале было бы так: мы меняем нужную переменную в .env, и либо минуем страницу входа (кроме случаев, когда на на неё действительно надо), либо входим на сайт без ввода логина и пароля, просто по нажатию кнопки "войти". Естественно, что если мы просто сменим маршрут по умолчанию, то нас без аутентификации должно автоматически вернуть на страницу входа, а это тоже нужно только на стадии эксплуатации сайта.