Pull to refresh

Comments 126

Одно из пока что незадокументированных изменений — в конструкторах контроллеров теперь нельзя получить инстанс авторизованного юзера (и, скорее всего, любые другие инстансы, которые зависят от Middleware). Т.е. если в <= 5.2 вы где-то использовали такой код:


class HomeController extends Controller
{
    protected $user;

    public function __construct()
    {
        $this->user = Auth::user(); // Или auth()->user()
    }
}

то теперь это не работает.

А как будет работать?

В официальной документации пишут что
You may access the authenticated user via the Auth facade:

use Illuminate\Support\Facades\Auth;

$user = Auth::user();

Изменения касаются только конструкторов контроллеров. В других местах всё работает так же, как и прежде.

Подтверждаю. Только что проверил — в конструкторе никак не срабатывает, даже если явно указать с какого фасада брать.
А в в других методах все норм.

Стоит отметить, что Dependency Injection через конструкторы (в том числе контроллеров) по-прежнему работает.

Есть такое дело. Фреймворк очень по душе, но вот обработка задач в трекере не впечатляет ни разу.
может я чего то не понимаю, можно разъяснить, пожалуйста, зачем вообще в конструкторе контроллера записывать инстанс авторизаованного юзера в переменную?

Привычка, потом удобно юзать типа $this->user
Страшного на самом деле ничего нет.
Просто сломался функционал, а нигде об этом ни слова )

в чем разница между написанием $this->user и Auth()->user?
количество символов примерно одинаковое а логически второе выглядит яснее вроде.

Ну как минимум, чтобы не дергать лишний раз создание фасада

Это — хорошая практика, экономить на всем.

Почему нельзя сделать ленивый getter? Его даже можно вынести в trait. И совсем хорошо — добавить под этот trait также и интерфейс

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


я выше писал


Страшного на самом деле ничего нет.
Просто сломался функционал, а нигде об этом ни слова )

Вы ведь понимаете, что обращение к Auth фасаду — это лютое зло? И что дабл диспатчеризация (или DI в конструктор) на порядок лучше сервис локации?

Чтобы не получать его руками в каждом методе контроллера. Это, конечно, не сложно, но иногда бывает удобно сделать это один раз и забыть.
Получать-не получать дело каждого, хотя запрос к базе всего один идет даже при конструкции вида:
$username = 'Guest';

if( \Auth::check() ){
    $username = \Auth::user()->name;
}


Хотя, для сохранения изменений лучше, все же, юзать как пишет Rencom:
class ... {
    protected $user;

    function __construct(){
        $this->user = \Auth::user();
    }

    public function changeName($name) {
        $this->user->name = $name;
        $this->user->save();
    }
}
и не всегда понимать, user_id к чему относится, к текущему пользователю, или к какому либо другому. Приходится лезть и искать где и как устанавливается этот user_id
В YII есть такое понятие как Виджеты!!!
<?php
$this->widget('CMaskedTextField',array(
    'mask'=>'99/99/9999'
));
?>

Есть ли что то подобное для или в Ларавел ??
Конечно понимаю что это костыль все таки, мешать серверсайд с клиентсайд, но все таки!!!
Из коробки такого нет. Но это можно решить через так называемые view composer.
Вы правда считаете, что вашему комментарий необходимо было шесть знаков восклицания? Мне вот кажется, что их у вас на шесть больше, чем требуется по смыслу.
А при чем здесь вообще Уии и его виджеты, когда статья о релизе новой версии Laravel?
YII поэтому и легче использовать (получил большое распространение), потому что морду легче ваять…
Обрати внимание, что Уии, в основном, используется в России, а за рубежом — Laravel. ;)
А вы не можете объяснить с чем это связано?

Тег strike> на работает на восклицательных знаках.
Ну почему в России YII стал более популярен чем за рубежом ??
Я по поводу этой части:
Тег strike> на работает на восклицательных знаках.


А что касается:
А вы не можете объяснить с чем это связано?

Много различных мнений в Инете читал при выборе фрейма и, как мне показалось, Уии несет в себе множество различного рода костылей и нарушение логики структуры, вдобавок, логика Laravel практически совпадает с моей и, таким образом, лично мне удалось очень быстро вкурить что и как в нем работает, задавая себе вопрос: «Куда бы я этот метод сунул?».

Если интересны более развернутые ответы, рекомендую погуглить эту тему.

Ах да, российские разработчики ведутся на рекламу и всякую хрень в виде «нафиг разделять проект на MVC, когда можно все в одном месте фигачить», вот и сидят на битриксе да Уии.
Это мое сугубо личное мнение.

Разве Yii(2) не имеет как раз таки вполне понятную структуру для работы с MVC?
ЗЫ Ларавел, однако, я не пробовал.

Извините, в сортах… не разбираюсь)
Зачем грубить, если ответить толком не можете? С таким же успехом любой питонис и GO-шник, скажет что PHP болото с троллями — и будет прав.
Чем выше не ответ? Так и сказал — не разбираюсь.
Между "я не обладаю информацией, чтобы ответить на вопрос" и "я в этом говне разбираться не намерен" есть всё-таки разница же. Первое — это какой-никакой ответ, а второе — вообще непонятно что.
Заметьте, это Вы про говно написали. Как говорится, кто о чем подумал.
В тексте моего комментария нет данного слова и, как видим, комментарий изначально таким был, без изменений.
Так что свои додумки не нужно приписывать другим людям.
Ой, давайте только вот без этого. То, что вы не написали само слово, не освобождает вас от ответственности. Вы именно его имели ввиду, использовали устойчивое выражение и так далее.
Да вы что говорите? С каких пор вы якобы читаете чужие мысли? Научите?
В моем понимании фраза читается как «Извините, в сортах фреймворков не разбираюсь)», а не то что вы там себе на уме подумали.
Стереотипами думаете, сэр… Стереотипы — не есть гут.
А я пробовал и Yii и Laravel. Ну, например, SPA на laravel будет в разы проще делать, а учитывая то, что тенденции меняются в их сторону, это очень даже актуально.
Можете сказать чем?
Прям конкретный пример? Если взять Yii как бэкенд то там есть неплохой REST генератор.
'rules' => array(
    array('restUser/index', 'pattern' => 'api/v1/users', 'verb' => 'GET'),
    array('restUser/view', 'pattern' => 'api/v1/users/<id>', 'verb' => 'GET'),
    array('restUser/create', 'pattern' => 'api/v1/users', 'verb' => 'POST'),
    array('restUser/update', 'pattern' => 'api/v1/users/<id>', 'verb' => 'PUT'),
    array('restUser/delete', 'pattern' => 'api/v1/users/<id>', 'verb' => 'DELETE'),
)


Route::get('api/v1/users', 'UserController@index');
Route::get('api/v1/users/{id}', 'UserController@view');
Route::post('api/v1/users', 'UserController@create');
Route::put('api/v1/users/{id}', 'UserController@update');
Route::delete('api/v1/users/{id}', 'UserController@delete');

Второй вариант не совсем корректен, он заменяется на:


Route::resource('api/v1/users', 'UserController');

Первый вариант кстати тоже, он заменяется на:


'rules' => [
       ['class' => 'yii\rest\UrlRule', 'controller' => ['api/v1/users', /**...*/ ]],
]
Ок, прям из мануала:
http://www.yiiframework.com/doc-2.0/guide-rest-routing.html:

'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
],
]

For example, the above code is roughly equivalent to the following rules:

[
'PUT,PATCH users/' => 'user/update',
'DELETE users/' => 'user/delete',
'GET,HEAD users/' => 'user/view',
'POST users' => 'user/create',
'GET,HEAD users' => 'user/index',
'users/' => 'user/options',
'users' => 'user/options',
]

Так что как-то не убедительно.
use yii\web\Controller;
use yii\filters\AccessControl;

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['login', 'logout', 'SIGNUP'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['login', 'signup'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout'],
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
    // ...
}


Route::group(['middleware' => ['auth', 'role:editor']], function () {
  Route::get('/', function ()    {
    // Использует посредника Auth
  });

  Route::get('user/profile', function () {
    // Использует посредника Auth
  });
});


'components' => [
    // ...
    'i18n' => [
        'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                //'basePath' => '@app/messages',
                //'sourceLanguage' => 'en-US',
                'fileMap' => [
                    'app' => 'app.php',
                    'app/error' => 'error.php',
                ],
            ],
        ],
    ],
],

\Yii::t('app', 'welcome');


В Laravel просто натыкать файлики:
/resources
  /lang
    /en
      messages.php
    /es
      messages.php

trans('messages.welcome');
$model = new \app\models\ContactForm();

// populate model attributes with user inputs
$model->load(\Yii::$app->request->post());
// which is equivalent to the following:
// $model->attributes = \Yii::$app->request->post('ContactForm');

if ($model->validate()) {
    // all inputs are valid
} else {
    // validation failed: $errors is an array containing error messages
    $errors = $model->errors;
}



public function rules()
{
    return [
        // the name, email, subject and body attributes are required
        [['name', 'email', 'subject', 'body'], 'required'],

        // the email attribute should be a valid email address
        ['email', 'email'],
    ];
}


public function store(Request $request)
{
    try {
      $this->validate($request, [
        'name' => 'required',
        'email' => 'required|email',
        'subject' => 'required',
        'body' => 'required',
      ]);
    } catch(\Illuminate\Foundation\Validation\ValidationException $e) {
        return $e->getResponse();
    }

  // Статья прошла проверку, сохранение в БД...
}


Я могу продолжить…

Второй вариант этого примера тоже можно сделать на порядок удобнее:


class UserStoreRequest extends FormRequest
{
    public function rules()
    {
        return [
            'name' => 'required',
            'email' => 'required|email',
            'subject' => 'required',
            'body' => 'required',
      ];
    }
}

// Controller

public function store(UserStoreRequest $request)
{
    /// Запросы на этот метод всегда будут валидными и содержать верные данные
    return User::create($request->all());
}

Вот по переводам не стоит даже сравнивать. В Yii intl со всеми его фичами. То, что в Laravel на эту тему, не дотягивает даже до Yii 1.1. Скорее всего, причина в географии основных авторов и пользователей фреймворка. Для штатов переводы, мягко говоря, не актуальны.

И что там по переводам такое навороченное?

DSL в котором чёрт ногу сломит, вместо Symfony\Laravel совместимого синтаксиса.

Ну короче я так понял — для Yii лучше «Все свое ношу с собой» и ни с кем делится не собираюсь.

Почему? Тот же i18n мы помогли допилить в Aura.

имеется в виду разделение на либы.

Это не так просто, как может показаться. Особенно учитывая обратную совместимость. Так-то я лично ничего против отдельных библиотек не имею, если они качественно сделаны.

ну yii2 не сохранил совместимость по сравнению с yii1. А сделано все так же.

Так мы говорим про сейчас, а не про 2011 год, когда эти решения принимались.

все правильно. Об этом и речь: для Yii лучше «Все свое ношу с собой» и ни с кем делится не собираюсь.

Не всё так однозначно. С одной стороны "такое есть только у нас" — как бы и плюс фреймворку. С другой — универсальные библиотеки проще поддерживать, хоть и сложнее написать. Они потенциально могут получить больше пользователей и pull request-ов.


Вообще цель Yii не сманить всех юзеров и получить с них какой-то профит, а дать сообществу (и себе в том числе) отличный инструмент для API и веб-разработки.

>>> «такое есть только у нас» — как бы и плюс фреймворку.

что это дает? ни монетизации, ни вклада в php-сообщество

ни один человек не перейдет на yii ради валидации, а замкнутость внутри себя ничего хорошего не дает ни yii ни разработчику.

Очевидно, это даёт конкурентное преимущество при начальном выборе фреймворка разработчиком. Если мне нужно сделать REST API, я предпочту фреймворк, который умеет REST API из коробки, а не просто фреймворк и непонятно какого качества сторонний пакет. Ну и по аналогии с другими фичами всё то же самое.


ни один человек не перейдет на yii ради валидации

Ради одной валидации — нет. Ради валидации, кодогенерации, ActiveRecord, скорости работы и других понравившихся моментов — вероятно. Особенно когда альтернатива — делать что-либо с нуля, тратя на это своё драгоценное время.

>>> Очевидно, это даёт конкурентное преимущество при начальном выборе фреймворка разработчиком.

ну и что в итоге в yii есть, что дает преимущество для джуниора? intl-форматирование вряд ли можно к этому отнести — какие-то плюсы становтяся видны только после какого-то опыта. gii — ну ок. Все фичи так или иначе процентов на 80-90 присутствуют везде, но «раздербаненому» ларавелу это не мешает набирать популярность.
И какие преимущества «блокируют» разнос функционала по пакетам? Наверное дело не в этом?

Я отвечал на вопрос «что это дает?» с точки зрения завоёвывания первого места среди фреймворков и всего такого. В случае Yii цели непременно стать первым и конвертировать своё первое место в деньги нет. Yii никогда не был коммерческим и, возможно, никогда не будет. Мы просто делаем удобный нам и нашему сообществу инструмент.


Теперь отвечу на вопрос о том, что именно блокирует разнос функционала по пакетам. Это банально обратная совместимость. Сломать всё и выпустить Yii 3.0 в виде ядра и библиотек — это не наш метод. Времени поддерживать 1.1, 2.0 и 3.0 одновременно у нас нет. Останется множество проектов на Yii 2.0, которые не смогут мигрировать (как это уже случилось с 1.1). Просто взять и кинуть сообщество — это неправильно. Поэтому когда и если мы примемся за выделение отдельных библиотек, делать мы это будем постепенно. Чтобы дать возможность безболезненно мигрировать.

честно, я вижу одно «бла-бла». Сотни слов вместо дела.
Тут все просто — либо да, либо нет.
Если да, то поехали. Можно начать с выноса db-слоя и создания соответствующих интерфейсов и адаптеров в оставшейся части фреймворка, и зарелизить в 2.5/3.0.
Если нет, то даже обосновывать не нужно, и этот подтред существует зря.

Я только за. Если есть время и желание поучаствовать — можно на форуме начинать прикидывать интерфейсы.

Роутер проще пишется:
'rules' => [
    ['class' => 'yii\rest\UrlRule', 'controller' => [
        'subject',
        ...
        ],
    ],


Ну а в плане реализации? В Yii стандартные CRUD есть из коробки. Методы в контроллерах не дублируются.
SamDark
Вот по переводам не стоит даже сравнивать. В Yii intl со всеми его фичами. То, что в Laravel на эту тему, не дотягивает даже до Yii 1.1. Скорее всего, причина в географии основных авторов и пользователей фреймворка. Для штатов переводы, мягко говоря, не актуальны.

В данной ситуации я — пользователь и сравниваю то, с чем успел поработать. Если нужен именно intl — уверен, под laravel есть соответствующий extension. В случае Laravel — в 80% случаев все работает из коробки так, как требуется в большинстве прикладных задач. В Yii же — всегда нужно править конфиги, где-то что-то допиливать, а порой и вендор переопределять. Такая кастомизация — это не плохо, да только время разраба на это расплывается.

Задача перевести приложение на 10—20 языков, в которых ни один из программистов ничего не понимает, довольно типична. Особенно для коробочных устанавливаемых продуктов. Разве не так?

Задача перевести приложение на 10—20 языков, в которых ни один из программистов ничего не понимает, довольно типична. Особенно для коробочных устанавливаемых продуктов. Разве не так?

На моей практике коммерческой разработки это происходит обычно так — программисту передают переводы нужной локали и он их сам добавляет. Вендорных переводов, как правило, остается >30%
Ну а в плане реализации? В Yii стандартные CRUD есть из коробки.

image
Это все пустые скелеты. Полноценные контроллеры через этот генератор не сделать. И даже если генерировать эти заглушки — во всех контроллерах будут дублироваться CRUD операции. В Yii они вынесены в отдельные классы, и по факту в контроллерах будет меньше 10-ти строк (не считая поведения, которые к нему подключены).
Ни разу, ни в одном проекте, не случалось сгенерированный на Yii CRUD оставлять нетронутым.
Чаще наоборот, переписывать полностью. Но, да, gii красивая игрушка.
По необходимости добавляете в контроллер методы для получения нестандартных данных?
Логику можно раскидать по behavior, всякие проверки в filter, валидаторы в модели или вынести в отдельные классы. В контоллерах остается примерно это:
class SomeController extends ActiveController
{
    public $modelClass = SomeModel::class;
}

Ну и описание фильтров сюда еще добавится.
Если писать RESTful сервисы — этого должно хватать.
связано с тем что рынок клюнул на уии как и на битрикс, оп круто кровати с массивов, а давайте и будем пилить кровати с массивов без нормального автокомлита и тд. Чисто мое мнение.
Странно сравнивать битрикс и Yii.
Просто в Yii довольно много всего из коробки (как работает не важно). как в Laravel не знаю.
В Ларе очень важно как работает то, что «из коробки». Если работает не важно — пакет просто исключат из его состава.

Такое внезапное исключение пакетов уже бывало? А как же обещание LTS и всё такое?

Не в курсе было или нет, знаю что в нем точно не было глючных пакетов.
По поводу LTS, походу, разрабу надоело старые версии поддерживать. Другого логического объяснения придумать не могу.
Не понял фразу «кровати с массивов» — про массивы слышал, про «кровати» в контексте PHP нет, что это?
Пробовал как то, очееень много магии и не типизированных вызовов. Забросил, не понравилось.
Так фасады же можно и не использовать. И стараться кодить под интерфейсы.
Ура! Это случилось. Понятно что уже давно можно было использовать и прочее бла бла бла, но таки релиз это принципиальный момент и безумно радует. Изменений реально много и интересно как это в жизни проявит себя в средне-долгосрочном периоде.
И вообще пора уже больше и больше завоевывать Laravel рынок в рунете, ато не порядок. Yii и других обижать не нужно, Yii2 тоже отличная вещь. Или тот же Symfony(Laravel кстати активно использует компоненты оттуда), просто команде Laravel, помимо хорошего фремворка, удалось создать звезду из него, благодаря популярности он быстро обрастает фишками, функционалом, расширениями и решениями для обхода кучи проблем. Еще позволяет еще меньше кодить(это касается рутины), а сосредоточится на важных архитектурных моментах. Для любителей стабильности, начиная с версии 5.1 появились LTS релизы.
Короче говоря есть смысл задуматься и на досуге попробовать что-то собрать, порог вхождения для любителя последних технологий и модных фишек PHP достаточно легок.
А с версией 5.3 порог вхождения новичков еще проще, насколько сам смог оценить)

Лично я знакомился с Ларой когда только 5.0 вышла в свет. Уже тогда глядя на 4.2 видел значительную разницу. Кстати, в изучении пришлось очень тяжко, т.к. документация по 5.0 была только на офф сайте в виде текста и обо всем приходилось либо догадываться методом «научного тыка», либо вчитываться в доку. А сейчас, как написал чуть выше, версия 5.3 для новичков стала очень простой. Радует)

Я с коллегами знакомился с ларавелем когда выша версия 4.0 или 4.1 — точно не помню.
После этого изменения до 4.2 были вполне себе неплохими, обновились.
Теперь 4.2 устарела, не LTS, баги не будут правиться, уже сталкивался с этим — предлагают обновляться.
А проектов уже больше десятка.


Теперь выходит 5.3. Он не LTS, изменения с 5.0 до 5.3 по структуре и прочему были значительными, нет обратной совместимости.
И я теперь даже не знаю на какой версии начинать проекты. 5.1 LTS, но там много чего нет, 5.3 уйдёт в небытие и просто так обновиться до следующего LTS (5.6 например) может не выйти.


Это очень сильно огорчает.

5.3 рассчитан на работу с пыхом 7, а вообще поддерживает 5.6.4 или выше.
По поводу LTS даже не подскажу — у меня всего пара проектов, которые легко (ну, почти легко) обновляю до свежей версии.

Дополнительно скажу мнение, пусть возможно и непопулярное.
То, что они не следуют SemVer, нарушается обратная совместимость и происходят кардинальные изменения в рамках мажорной версии (5-ая), означает только то, что фреймворк ещё не зрелый.


И вот моя заметка для начинающих: надо иметь это ввиду и понимать, что в любой момент всё может поменяться.

Переходил с 4.2 -> 5.0, с 5.0 -> 5.1, с 5.0 -> 5.2 в принципе если внимательно это делать, то даже на объемный проект уходит не так много времени.

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

Как по мне, фреймворк можно назвать зрелым, когда у него не выходят минорные релизы, где постоянно меняется структура и ломается обратная совместимость.


Я тоже люблю держать свои личные проекты на последних версиях.
Но не проекты на работе, над которыми работает 5 человек, и где не хотелось бы останавливать их работу ради обновления с нарушенной обратной совместимостью, переносить на другой сервер ради php 5.6. И уж тем более когда таких проектов больше 10.

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

По факту изменений структуры в минорных версиях, нигде не видел чтобы кто-то регламентировал это, более того мы можем тогда ругать разработчиков PHP за то, что эти гады добавляют и изменяют функциональность в минорных версиях(если смотреть на это взглядом сверху) :) в общем-то подобный подход и дает свежачек этому фреймворку

Laravel поддерживает php7 и 5.6, все что ниже уже давно «протухло», не выпускаются даже фиксы по безопасности: http://php.net/supported-versions.php

Я думаю если на проект вброшено аж 5ppl команда, то она следит за безопасностью продукта и уже давно должна была напинать под зад сисадмину для перехода на новую версию.

Хотя это уже все придирки, да и в общем то… я сейчас на должности Java программиста, так что мне грех Php обсуждать :)
На тему работы следует учесть и придирки работодателя. Сейчас работаю в одном из крупных информ агенств в городе. Тут код сайта написан на коленке в далеком 97 году и с тех пор его только дописывали. Сейчас вся эта штука работает на пыхе 5.2 и мускуле 5.5 под убунту 14.04. Это ладно — работает, ведь.

НО как только предложил руководству (лирическое отступление — руководство — это программеры, разработавшие сайт) перейти на пых 7, мускул 5.7 и вообще сайт с нуля переписать на фрейме, посыпалась куча возгласов на тему скорости обработки, «загруженности» кода и прочего. И пофигу, что их сайт открывается тыщу лет при инете в 50 метров на мощном компе, и пофиг что сделал тестовый раздел и показал, что на Ларе с полной версией бутстрапа страница генерится за 10-40 миллисекунд. МИЛЛИСЕКУНД, КАРЛ! А их сайт генерится около 400-1500 миллисекунд, судя по консоли разработчика в хроме…

А по теме, лично я тоже за переход. Вот, как в статье написано, переход занимает 2-3 часа. У меня сейчас проект на стадии разработки — его апгрейдил с 5.2 до 5.3 минут за 30: создал новый проект, подключил нужные пакеты, перекинул код контроллеров, роуты и прочее. Все. Готово. Работает как новый)
Мне кажется стоит такие проекты оставить и допиливать в рамках фреймворка. Больше тут ничего не поделаешь, особенно если апгрейд не заложен в счет.
Чтобы найти адекватную работу по Laravel, пришлось сменить страну проживания.
UFO just landed and posted this here
А после этого и сексуальную ориентацию: Java и Symfony2… :(
Звучит как отличное обновление! Я все еще склонен к симфони когда речь идет о большом проекте, но все мелкие-средние проекты теперь 100% буду писать на Laravel.

Единственное хочу отметить, тенденция фреймворков у которых почти 99% функционала идет out of the box ведет к тому, что люди пишут аппликухи быстрее, но не понимают как вещи работают under the hood. Идеальный пример — Java Spring. Провожу интервью по 3-4 человека в неделю, народ разворачивает API на Спринг буте за пару минут, но когда задаешь вопросы как работает @AutoWired или другие вещи — люди теряются и начинают рассказывать о черной магии…

Так она и есть для них чёрная магия. Не каждый лезет под капот инструмента и разбирается в его внутренностях. Если инструмент хороший, документации, как правило, достаточно, чтобы в исходник не заглядывать.

Да, а потом когда билд красный и не явный — люди опускают руки и даже не знают с чего начать искать проблему. «Ведь мне обещали, что все будет работать»

Ну, кто-то опускает, а кто-то лезет в исходник и ищет правду. В этом и разница между junior и выше.

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

Фреймворки — вещь отличная, но их использование должно мотивировать, а не тормозить саморазвитие.

Фреймворк — инструмент. Мотивировать — не его задача как не задача, например, электрической отвёртки ломаться и заставлять рабочего прокачивать кисти рук.

Тем не менее когда люди спрашивают где им «учиться» хорошим практикам, мы частенько даем им изучать фреймворки.
Это плохо? Разве в идиологии фреймворком не заложены хорошие практики (вернее должны быть)?
Так я как раз и говорю о том, что фреймворки, в большинстве случаев, это целая база хороших практик и поэтому фреймворк мотивирует программистов писать правильно, красиво и учитывая все паттерны. Но, к сожалению реалии таковы, что программисты не учатся а только используют все out of the box.

Идеология идеологией, а реальность, особенно в PHP и вебе, вносит свои коррективы. Вот в приложении не стал бы париться из за единичной просадки в пару миллисекунд, а в фреймворке приходится потому что эта единичная просадка может использоваться в реальных продуктах тысячи раз на страницу. Приходится жертвовать.

«Implicit controller routes using Route::controller have been deprecated. Please use explicit route registration in your routes file. This will likely be extracted into a package.»

Вот за это им жирнючий минус. Удобная штука… Была…
Вроде еще route.php убрали. Сделали папку routes с тремя файлами: api.php, console.php, web.php.
Изменений очень много — в статье они мало описали.
Создатели Laravel активно продвигают Vue.js :). Даже пример в 5.3 дистрибутив добавили.
Стоит ли делать миграции БД средствами фреймворка на базе 2 TB?
Sign up to leave a comment.

Articles