Laravel по-русски

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

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

#1 Re: Laravel 5.x » Как создать вывод ошибок валидации? » 07.03.2019 06:17:50

SZV

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

#2 Laravel 5.x » Как создать вывод ошибок валидации? » 03.03.2019 17:04:48

SZV
Ответов: 2

в шаблоне перед формой прописан вывод ошибок валидации

@if(count($errors) > 0)
    <div class="alert alert-danger">
      <ul>
        @foreach($errors->all() as $error)
          <li>{{ $error}}</li>
        @endforeach 
      </ul>
    </div>
@endif

в контроллере следующее

class ContactController extends Controller
{
   
    public function show(Request $request,$id=FALSE) {	
    
    	if($request->isMethod('post')) {
			$rules = [
			
				'name'=>'required|size:5',
				//'email'=>'required|email'
			
			];
			$this->validate($request,$rules);
			dump($request->all());
		}
		return view('default.contact',['title'=>'Contacts']);
	} 
}

в web прописано

Route::match(['get','post'],'/contact/{id?}',['uses'=>'Admin\ContactController@show','as'=>'contact']);

Не видит ошибки скрипт. Соответственно не выводит их. В чем тут проблема? Код простой.
Метод show обрабатывает и get и post запросы это чтобы было совсем просто.

#3 Laravel 5.x » Отправка запроса POST » 09.02.2019 11:17:30

SZV
Ответов: 1

Если я отправляю форму не используя 

csrf_field()

  у меня выходит ошибка 419 Извините, ваш сеанс истек. Обновите и повторите попытку.
Если я в форму встраиваю

csrf_field()

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

csrf_field()

что нужно сделать еще чтобы соединение было безопасным !!!
Помогите, иначе дальнейшее изучение ларавел будет бессмысленным. Или это проблема не решаемая, но тогда как пользуются ларавел?  Могу предоставить остальной код, он на этапе учебы очень простой.
Файл с формой

	<form method="post" action="{{ route('contact') }}">
	{{ csrf_field() }}	

Файл маршрутизатор web

Route::match(['get','post'],'/contact',['uses'=>'Admin\ContactController@show','as'=>'contact']);

Файл контроллер

 public function show(Request $request) {
print_r($request->all());
return view('default.contact')->withTitle('Contacts!!!'); 
}

Может быть что-то в этих файлах перенастроить?

#4 Laravel 5.x » маршрут » 01.02.2019 17:55:03

SZV
Ответов: 0

Я создал  свой файл page который выводит надпись на экран СТРАНИЦА
Если я оставляю маршрут прежним

Route::get('/', function () {
    return view('page'); 
});

где меняю welcome который выводит на экран приветствие на свой файл.
Ларавел находит мой файл и появляется надпись "СТРАНИЦА"
Если же я прописываю другой путь

Route::get('/page', function () {
    return view('page'); 
});

и прописываю в адресной строке браузера

http://blog/page

у меня появляется ошибка

 Объект не найден!
Запрошенный URL-адрес не найден на этом сервере. Если вы ввели URL вручную, пожалуйста, проверьте написание и повторите попытку. 

Почему появляется эта ошибка?

#5 Laravel 5.x » Не устанавливается laravel на OpenServer » 07.04.2017 18:27:01

SZV
Ответов: 1

Ввожу в консоль OpenServer:
composer global require "laravel/installer"
но установка не происходит.
Выводится сообщение:
nothing to install or update
generating autoload files

#6 Re: Laravel 5.x » Ошибка SQLSTATE[42S21] » 30.03.2017 16:21:51

SZV
skiphog пишет:
SZV пишет:

Может быть внешние ключи можно установить неким более простым способом?

Судя по "mySQL 5.7-64" у вас установлен OpenServer? Там есть PhpMyadmin.
Зайдите туда, выберите вашу БД и выполните запрос
Для юзеров

alter table articles add foreign key articles_user_id_foreign (user_id) references users(id)

И для категорий

alter table articles add foreign key articles_category_id_foreign (category_id) references categories(id)

Ну и да. Вам уже написали

constb пишет:

...внешние ключи нужны только в связке с on cascade delete, on cascade update и on cascade set null

Благодарю. К таблице articles в индексах прописалась строка articles_user_id_foreign, но по прежнему нет строки  articles_category_id_foreign.
Блин, а есть более простой способ подключения внешних ключей к готовым таблицам?

#7 Re: Laravel 5.x » Ошибка SQLSTATE[42S21] » 30.03.2017 12:25:03

SZV
skiphog пишет:
SZV пишет:

... У меня вначале вообще не устанавливались таблицы, установил только когда перешел mySQL на 5.7-64

Документация https://laravel.com/docs/5.4/migrations#indexes

Laravel 5.4 по умолчанию использует кодировку utf8mb4, которая включает в себя поддержку смайлов "emoji"
Если вы хотите использовать mysql 5.6, то можно в AppServiceProvider => boot добавить Schema::defaultStringLength(191);
либо пойти в config => database и в настройках mysql сменить кодировку utf8mb4 на utf8 и collation на utf8_unicode_ci, но тогда поддержки "emoji" не будет...

Теперь, что касается миграции...

Мускул же вам понятно написал причину ошибки.
Вы пытаетесь добавить столбец, который уже существует в таблице.
Вы уже создавали этот столбец в предыдущей миграции, верно? Если вы действительно хотите его изменить, то добавьте ->change()

$table->integer('user_id')->unsigned()->default(1)->change();
*должен быть установлен doctrine/dbal
--
Если вам не нужно менять столбец, а нужно только связать ключи, то эту строку вообще удалите, но учтите, что для связывания user_id должен быть unsigned, иначе опять выскочит ошибка.

Вы правы. Добавил ->change(). Немного продвминулся в решении проблемы, но вышла другая ошибка
"[RuntimeException]
Changing columns for table "articles" requires Doctrine DBAL; install "doctrine/dba 1"."

Т.е. то о чем Вы пишите. Добавить doctrine/dba 1.

Смею спросить а как правильно установить этот doctrine/dba 1.
Нашел:
"Если вы используете функцию renameColumn в ваших миграциях, то вам надо будет добавить зависимость doctrine/dbal в ваш файл composer.json. Этот пакет больше не входит в Laravel по умолчанию."

Где находится файл composer.json. что за зависимость необходимо добавить? Я так понимаю, что по умолчанию в Laravel сейчас нет doctrine/dba. Может быть внешние ключи можно установить неким более простым способом? Или все таки установить doctrine, но опять же как?

#8 Re: Laravel 5.x » Ошибка SQLSTATE[42S21] » 30.03.2017 08:20:10

SZV
constb пишет:

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

Благодарю! Правильно поправил меня, мне действительно нужно установить внешние ключи. Но тот алгоритм по внешним ключам который я делаю должен выполняться, но где-то ошибка. У меня вначале вообще не устанавливались таблицы, установил только когда перешел mySQL на 5.7-64. Не знаю, может быть есть какой то другой алгоритм действий есть по установлению внешних ключей.

#9 Laravel 5.x » Ошибка SQLSTATE[42S21] » 30.03.2017 06:46:14

SZV
Ответов: 8

Формирую миграцию по изменению таблицы

php artisan make:migration ChangeArticlesTable --table=articles
Миграция происходит успешно.

Далее открываю файл миграции, вношу записи по формировании связи с другой таблицей
    $table->integer('user_id')->unsigned()->default(1);
    $table->foreign('user_id')->references('id')->on('users');         
     $table->integer('category_id')->unsigned()->default(1);
     $table->foreign('category_id')->references('id')->on('categories');
Дальше необходимо внести изменения командой
php artisan migrate

Но изменения не вносятся, появляется сообщение об ошибке:

[Illuminate\DATABASE\QueryException]
SQLSTATE[42S21]: COLUMN already EXISTS: 1060 Duplicate COLUMN name 'user_id'
(SQL: ALTER TABLE 'articles' ADD 'user_id' INT UNSIGNED NOT NULL DEFAULT ‘1’, ADD 'catego ry_id' INT UNSIGNED NOT NULL DEFAULT ’l’)

[PDOException]
SQLSTATE[42S21]: COLUMN already EXISTS: I960 Duplicate COLUMN name ’user_id'

В чем тут может быть проблема? Конечно, колонки у меня уже есть, но мне нужно выстроить взаимосвязи между таблицами.

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