Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Версия 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);
}
....
}
Не в сети
не припомню уже когда последний раз приходилось перекрывать конструктор в контроллерах, миддлвари полностью покрывают весь спектр задач для этого. кроме того конструктор контроллера отрабатывает на очень раннем этапе выполнения запроса – в это время многое ещё просто не инициализировано или недоступно – довольно бессмысленно выходит, фактически только для внедрения зависимостей в класс и подходит, но это удобнее сделать в самих экшенах. а логику предобработки запросов логичнее помещать в миддлвари и валидацию
ps. а методы запросов вообще проверяются в маршрутизаторе. если в экшены контроллера смотрят только Route::post маршруты, то понятное дело никаких get-запросов там и быть не может
Не в сети
Ушел от проблемы путем создания в Welcome переменной $request = new Request;
Про POST) Я разово проверяю его в Welcome. Вся структура приложения в invoke(). Если GET - получай страницу, если POST значит обрабатываемые данные. Не усложняю структуру себе)
Не в сети
Не усложняю структуру себе)
вообще-то усложняешь и очень серьёзно. а уж про того, кому потом придётся поддерживать этот «велосипед с квадратными колёсами», я вообще молчу – боже помилуй его душу
Не в сети
Не усложняю структуру себе)
вообще-то усложняешь и очень серьёзно. а уж про того, кому потом придётся поддерживать этот «велосипед с квадратными колёсами», я вообще молчу – боже помилуй его душу
У меня каждый блок отвечает за свой спектр работ) У меня идеальная структура с наименьшими затратами поиска кода и т. д.)
Не в сети
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?
Не в сети
Тебе выше ребята дали уже совет, ты не послушал и сейчас ловишь последствия своего велосипедостроения. Советую перечитать тему и отрефакторить.
Не в сети
Рефакторил. Растет количество поглощаемой память и скорость выполнения:D
Не в сети
Страницы 1