Laravel по-русски

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

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

#1 23.05.2017 15:03:46

parent::__construct() В контроллерах

Версия Laravel: 5.4
Версия PHP: 5.6.30
Операционная система и её версия: Windows Server 2012R2
Вендор и версия сервера БД: MYSQL 5.6
Вендор и версия Веб-сервера: IIS 7.5
Медод подключения PHP: FastCGI

Задача, что должно происходить _в целом_, техническое задание:
Нужно выполнить parent::__construct(); В контроллере Request
Что произошло, текст ошибки, если есть:
Если внедрять переменную Request $request в конструктор и парент. То запредельно начинает кушать скрипт памяти.
Какие еще методы выполнить parent::__construct()?
Код:
app\Http\Controllers\Welcome.php

<?php

namespace App\Http\Controllers;

use App\SessionsDrupal;
use App\RolesUsers;
use Illuminate\Http\Request;

class Welcome extends Controller{
	//Переменная для вида
	public $template;

	//Сcылки на личный кабинет
	public $lk = [];

	public function __construct(Request $request){
		//Проверка на POST
		$this->post = $request->isMethod('post');
        }
  .............

app\Http\Controllers\Request.php

<?php

namespace App\Http\Controllers;

class Request extends Welcome{
	
	public function __construct(){
		parent::__construct();
		//var_dump($this->lk);
	}

....
}

Не в сети

#2 23.05.2017 18:10:19

Re: parent::__construct() В контроллерах

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

ps. а методы запросов вообще проверяются в маршрутизаторе. если в экшены контроллера смотрят только Route::post маршруты, то понятное дело никаких get-запросов там и быть не может smile

Не в сети

#3 24.05.2017 10:02:09

Re: parent::__construct() В контроллерах

Ушел от проблемы путем создания в Welcome переменной $request = new Request;

Про POST) Я разово проверяю его в Welcome. Вся структура приложения в invoke(). Если GET - получай страницу, если POST значит обрабатываемые данные. Не усложняю структуру себе)

Не в сети

#4 24.05.2017 12:59:17

Re: parent::__construct() В контроллерах

Не усложняю структуру себе)

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

Не в сети

#5 24.05.2017 15:04:14

Re: parent::__construct() В контроллерах

constb пишет:

Не усложняю структуру себе)

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

У меня каждый блок отвечает за свой спектр работ) У меня идеальная структура с наименьшими затратами поиска кода и т. д.)

Не в сети

#6 03.11.2017 13:07:48

Re: parent::__construct() В контроллерах

UP тему!

В конструкторе выполняю сбор данных об объекте!

public function __construct(Request $request){
        parent::__construct();
        if(!is_null($request->route('mid'))){
            $this->meeting = DB::table('meetings')->where('mid',$request->route('mid'))->first();
            if(!is_null($this->meeting)){
                $this->meeting->bulletins = DB::table('meetings_bulletins')->where('mid',$this->meeting->mid)->get();
                $this->meeting->data = DB::table('meetings_data')->where('mid',$this->meeting->mid)->pluck('value','key');
                $this->meeting->members = DB::table('meetings_members')->where('mid',$this->meeting->mid)->get();
                $this->meeting->promiser = DB::table('meetings_proms')->where('mid',$this->meeting->mid)->pluck('value','key');
            }else{
                return redirect('/')->send();
            }
        }
    }

Есть классы наследуют этот класс! Содержащий данный конструктор!
И получается там происходит такой вызов

public function __construct(Request $request){
        parent::__construct($request);
    }

Не думаю что это правильное решение! Есть возможность из конструктора другим способом дернуть параметр mid не передавая по родству $request?

Не в сети

#7 03.11.2017 14:19:21

Re: parent::__construct() В контроллерах

Тебе выше ребята дали уже совет, ты не послушал и сейчас ловишь последствия своего велосипедостроения. Советую перечитать тему и отрефакторить.

Не в сети

#8 03.11.2017 14:22:18

Re: parent::__construct() В контроллерах

Рефакторил. Растет количество поглощаемой память и скорость выполнения:D

Не в сети

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