Laravel по-русски

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

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

#1 20.12.2017 16:53:52

Помогите понять, почему работает роутер

Всем доброго времени суток. Начинаю осваивать Ларавел на примере локального сайта (стоматологическая клиника).
--------------------------------
Версия Laravel в формате 5.4.

    Версия PHP в формате 7.1

    Операционная система и её версия ( Windows 10 x64 )

    Вендор и версия Веб-сервера в формате Apache- PHP - 7 / Nginx 1.10

----------------------------------
Ошибки нет, хотя ожидал.
Догадок нет.

Итак,есть следующие файлы:
1. в web.php несколько роутов, привожу только интересующие :
   // Главная страница
    Route::get('/','MainController@main')->name('pageMain');
   ....
   // Обработка формы заявки
    Route::post('/','MainController@form')->name('form');

2. в main.blade.php кроме всего прочего есть код формы заявки :
    <form action="{{route('pageMain')}}" method="post">
    ...
   </form>

3. в MainController.php описаны 2 метода:
    class MainController extends Controller
   {
    public function main() {

        $doctors = Doctor::skip(0)->take(3)->orderBy('id', 'desc')->get();
        return view('main')->with(['b_doctors'=>$doctors,]);
     }

    public function form(){
        Client::where('id',1)->update([
                                    'name'      =>  $_POST['name'],
                                    'phone'     =>  $_POST['phone'],
                                    'service'   =>  $_POST['service'],
                                    'doctor'    =>  $_POST['doctor'],
                                    'day'       =>  $_POST['day'],
                                    'time'      =>  $_POST['cron'],
                                    'comment'   =>  $_POST['comment'],
                                    ]);
        $doctors = Doctor::skip(0)->take(3)->orderBy('id', 'desc')->get();
        return view('main')->with(['b_doctors'=>$doctors,]);
     }
   }
Вопрос: почему приведенный код осуществляет корректное обновление первой записи в БД, ведь форма НЕ обрабатывается методом form ?

Не в сети

#2 20.12.2017 20:24:02

Re: Помогите понять, почему работает роутер

Вопрос: почему приведенный код осуществляет корректное обновление первой записи в БД, ведь форма НЕ обрабатывается методом form ?

может быть php artisan route:clear ?

Не в сети

#3 20.12.2017 21:52:42

Re: Помогите понять, почему работает роутер

Он же берёт из модельки файл и обрабатывает его через б/д. Возможно проблема там. Нужно тщательно всё перепроверить

Не в сети

#4 21.12.2017 11:17:08

Re: Помогите понять, почему работает роутер

может быть php artisan route:clear ?

Route cache cleared!, все равно работает.... neutral

Он же берёт из модельки файл и обрабатывает его через б/д. Возможно проблема там. Нужно тщательно всё перепроверить

код модели я приводил. Там больше ничего нет. Ну кроме первых строчек:

namespace App\Http\Controllers;

use App\Client;
use Illuminate\Http\Request;
use App\Doctor;

neutral

Изменено PashaKiev (21.12.2017 11:17:27)

Не в сети

#5 22.12.2017 00:33:48

Re: Помогите понять, почему работает роутер

Ты должен знать что Роутер Контроллер и шаблоны Blade это MVC в Laravel, они друг без друга не работают. В роутах ты указал два варианта обработки запроса get и post. Поэтому роутер методом get или post обращается к контроллеру уже изначально, далее через модельку положит в базу данные. Если тебе нужно что изменить читай дкументацию. Вот ссылка как работают роуты и как их нужно писать https://laravel.com/docs/5.5/routing

Не в сети

#6 22.12.2017 10:33:53

Re: Помогите понять, почему работает роутер

Я читал документацию...

Роут 'pageMain' вызывает метод контроллера  main, и ни какой другой.
Почему срабатывает метод form?

Может метод отправки формы "важнее" роута, и, видя что передаем данные через пост, выбирается метод, за который отвечает пост???
Сейчас создам еще одни метод form1, посмотрим... Может они оба выполнятся...

Не в сети

#7 22.12.2017 11:07:16

Re: Помогите понять, почему работает роутер

'name'      =>  $_POST['name'],

Почему вы не используете Request? То что вы используете не ларавел вей.
Почитайте еще для понимание вот это и это

Не в сети

#8 22.12.2017 11:07:53

Re: Помогите понять, почему работает роутер

Посмотри в генерируемые HTML - route('pageMain') просто сгенерирует URL вроде https://site.com/, а так как ты шлешь форму методом POST, срабатывает маршрут Route::post.

Не в сети

#9 08.01.2018 17:38:30

Re: Помогите понять, почему работает роутер

Почему вы не используете Request? То что вы используете не ларавел вей.

виноват, спасибо!

Не в сети

#10 18.01.2018 18:18:39

Re: Помогите понять, почему работает роутер

Сейчас создам еще одни метод form1, посмотрим... Может они оба выполнятся...

дописал в web.php строчку:
Route::post('/','MainController@form1');

в контроллер ниже функции
public function form(){
        Client::where('id',1)->update([
                                    'name'      =>  $request->input('name'),
                                    'phone'     =>  $request->input('phone'),
                                    'service'   =>  $request->input('service'),
                                    'doctor'    =>  $request->input('doctor'),
                                    'day'       =>  $request->input('day'),
                                    'time'      =>  $request->input('cron'),
                                    'comment'   =>  $request->input('comment'),
                                    ]);
        $doctors = Doctor::skip(0)->take(3)->orderBy('id', 'desc')->get();
        return view('main')->with(['b_doctors'=>$doctors,]);
     }
дописал
    public function form1(){
        die("1234567");
    }
После оправки формы - данные в БД не обновились (то есть form не отработал ?!?),а на белом фоне экрана появились 1234567 neutral

Вопросы остаются - буду еще разбираться....

Не в сети

#11 25.01.2018 12:15:36

Re: Помогите понять, почему работает роутер

Еще вопрос. Читал документацию, но не нашел ответ:

при регистрации пользователя в базе его пароль проверяется на соответствие условию:
'password' => 'required|string|min:6|confirmed';
в этом случае можно вводить только буквы и пароль записывается в базу уже в шифрованном виде $2y$10$E5ez9aJDCUZobcSt.ndAkeR9lrXdwr25Xc4xyscqGZHcv8DOGjUYu

Но я хочу что бы можно было вводить и цифры, по этому меняем условие проверки
'password' => 'required|min:6|confirmed';
Но теперь пароль не шифруется - a1a1a1.

Как исправить?)

Не в сети

#12 25.01.2018 15:14:27

Re: Помогите понять, почему работает роутер

Вопрос, не имеющий ничего общего с оригинальным, лучше задавать в новой теме.

От того, что ты убрал string из правил валидации, пароль не перестанет хэшироваться, поэтому смотри в код. Должен использоваться bcrypt(), например $user->password = bcrypt($request->password)

Не в сети

#13 25.01.2018 15:43:39

Re: Помогите понять, почему работает роутер

Спасибо)
учту...

Не в сети

#14 25.01.2018 15:51:35

Re: Помогите понять, почему работает роутер

Если не решил проблему, покажи пожалуйста код, где сохраняется пароль.

Не в сети

#15 25.01.2018 15:57:40

Re: Помогите понять, почему работает роутер

Если не решил проблему, покажи пожалуйста код, где сохраняется пароль

не , все верно. Я когда переопределил метод убрал функцию bcrypt(). Теперь все норм.

А под такой маленький вопрос все равно в новой теме расписывать все по шаблону: данные системы, версию php и т.д ?

Не в сети

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