Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
как вариант:
public static function transliterate ($string){
$str = mb_strtolower($string, 'UTF-8');
$leter_array = array(
'a' => 'а',
'b' => 'б',
'v' => 'в',
'g' => 'г',
'd' => 'д',
'e' => 'е,э',
'jo' => 'ё',
'zh' => 'ж',
'z' => 'з',
'i' => 'и,i',
'j' => 'й',
'k' => 'к',
'l' => 'л',
'm' => 'м',
'n' => 'н',
'o' => 'о',
'p' => 'п',
'r' => 'р',
's' => 'с',
't' => 'т',
'u' => 'у',
'f' => 'ф',
'kh' => 'х',
'ts' => 'ц',
'ch' => 'ч',
'sh' => 'ш',
'shch' => 'щ',
'' => 'ъ',
'y' => 'ы',
'' => 'ь',
'yu' => 'ю',
'ya' => 'я',
);
foreach ($leter_array as $leter => $kyr){
$kyr = explode(',',$kyr); // кирилические строки разобьем в массив с разделителем запятая.
// в строке $str мы пытаемся отыскать символы кирилицы $kyr и все найденные совпадения заменяем на ключи $leter
$str = str_replace($kyr, $leter, $str);
}
// теперь необходимо учесть правильность формирования URL
// поиск и замена по регулярному выражению.
// перв. выраж. указываем рег выражение. втор.выраж. строка или массив строк для замены
// // регуляр выражение ()+ может повторяться 1 и более раз., \s пробельный символ сразу же заменяется на '-'
// | Логическое или. либо то условие либо что указано справа от | притом справа укажем диапазон [A-Za-z0-9-]
// ^ Логическое отрицание. т.е. заменяем либо пробельный символ на тире, либо любой другой символ, что не входит в указанный диапазон.
$str = preg_replace('/(\s|[^A-Za-z0-9-])+/', '-', $str);
$str = trim($str,'-'); // если в конце появится тире, то его удаляем.
return $str;
}
и юзай как обычный свой хелпер.
$name = Helpers::transliterate($request->name);
либо ждать ответа от спецов, либо над твоим сообщением есть кнопка "Поиск" загугли там asset и во всяких разных темах подобное уже обсуждалось. гдето читал.. к примеру https://laravel.ru/forum/viewtopic.php?id=2993 .. можно и там поспрашивать
https://laravel.ru/forum/viewtopic.php?id=2799 ларавель обновляется каждые пол года. актуальные уроки не найдешь. в ссылке 5.2 и до сих пор актуально. редко когда там код пишется уже по другому. но суть вкурить можно. сам 2 месяца назад начал их вдуплять и почти все просмотрел/воспроизвел. под 55м уроком комменты оставил по проблемным местам с 5.5
Начал изучать Ларавель с столкунлся с пробелмой как реализовать не имею понятия
https://goo.gl/8uHrNY 100 уроков по ларавель. там версия 5.2 но на 96% актуально до 90х уроков. сам лично по ним учился, 2 месяца назад нашел.. под 55м уроком комментарии оставлял где проблемные места встречал
Лично я раньше делал чтото типа таво )))) (код по идее рабочий, мой, в своих черновиках нашел, но не проверял)
{{ Form::submit('Отправить', ['class' => 'btn btn-primary', 'onclick'=>'AjaxCreateValid()']) }}
function AjaxCreateValid()
{
var name = $("#name").val();
var family = $("#family").val();
var phone = $("#phone").val();
var email = $("#email").val();
var reason = $("#reason").val();
if (name && family && phone && email && reason && test_email == true) {
$('#succs_valid_created_email').show().delay(5000).fadeOut(); // Сообщение что запись создана, но сабмит перебивает.
} else {
if (!name) {
$('#error_valid_created_name').show().delay(5000).fadeOut();
return null;
}
if (!family) {
$('#error_valid_created_family').show().delay(5000).fadeOut();
return null;
}
if (!phone) {
$('#error_valid_created_phone').show().delay(5000).fadeOut();
return null;
}
if (!email) {
$('#error_valid_created_email_empty').show().delay(5000).fadeOut();
return null;
}else {
// если поле почты заполнено, проверяем ее валидность
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var test_email = regex.test(email);
if (test_email == false){
$('#error_valid_created_email').show().delay(5000).fadeOut();
return null;
}
}
if (!reason) {
$('#error_valid_created_reason').show().delay(5000).fadeOut();
return null;
}
return false;
}
return true;
}
<div id="succs_valid_created_email" class="alert alert-success" hidden="true" align="center">
Запись добавлена
</div>
<div id="error_valid_created_name" class="alert alert-danger" hidden="true" align="center">
Укажите своё Имя
</div>
<div id="error_valid_created_family" class="alert alert-danger" hidden="true" align="center">
Укажите свою Фамилию
</div>
<div id="error_valid_created_phone" class="alert alert-danger" hidden="true" align="center">
Укажите свой телефон
</div>
<div id="error_valid_created_email_empty" class="alert alert-danger" hidden="true" align="center">
Укажите свой электронный почтовый адрес
</div>
<div id="error_valid_created_email" class="alert alert-danger" hidden="true" align="center">
Формат почты указан не верно
</div>
<div id="error_valid_created_reason" class="alert alert-danger" hidden="true" align="center">
Укажите причину обращения
</div>
Дак вот же
https://yadi.sk/i/uxps8Dwq3PayKd
не? разве в 5.4 этого нет??
там вродеб как должно быть:
метод регистрации
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
если посмотреть в $this->validator, то:
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
// даже по указанной таблице проверяет уникальность почты и гоняет по маскам email
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
сама вьюха. скопировал саму суть
<div class="panel panel-default">
<div class="panel-heading">Register</div>
<div class="panel-body">
<form class="form-horizontal" method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Name</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" required autofocus>
@if ($errors->has('name'))
<span class="help-block">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group{{ $errors->has('login') ? ' has-error' : '' }}">
<label for="login" class="col-md-4 control-label">Login</label>
<div class="col-md-6">
<input id="login" type="text" class="form-control" name="login" value="{{ old('login') }}" required autofocus>
@if ($errors->has('login'))
<span class="help-block">
<strong>{{ $errors->first('login') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<label for="email" class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required>
@if ($errors->has('email'))
<span class="help-block">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
<label for="password" class="col-md-4 control-label">Password</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control" name="password" required>
@if ($errors->has('password'))
<span class="help-block">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<label for="password-confirm" class="col-md-4 control-label">Confirm Password</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Register
</button>
</div>
</div>
</form>
</div>
</div>
увы нет.. onDelete('cascade') я упустил. нужно будет както поправить миграциями..
кстати клевая ссылочка в подписях)
П.С. да, по ссылке создал миграцию и все стало норм работать. код сократился до:
public function destroy($id)
{
if (\Gate::denies('ADMIN', new \Corp\User)) {
abort(403);
}
if (Permissions::find($id)->delete()) {
return redirect('admin/permiss/index')->with(Session::flash('status', 'Привилегия Удалена!'));
}
return redirect('admin/permiss/index')->with(Session::flash('error', 'Не возможно удалить привилегию!' . ' ID ' . $id));
}
вот вечно так.. пол дня потеряешь, сделать не можешь, как вопрос задашь, так через 5 минут сам решаешь...
Permissions::find($id)->roles()->detach();
Permissions::find($id)->delete();
Задача: я хочу удалять мне не нужную привелегию (разрешение на просмотр какой либо страницы) вместе со всеми данными, к кому она была привязана. админу, модеру, 3м юзерам и собаке..
Таблица permissions (id,name)
public function roles(){
return $this->belongsToMany('Corp\Role','permission_role');
}
Таблица roles (id,name)
public function perm(){
return $this->belongsToMany('Corp\Permissions', 'permission_role');
}
Связующая таблица permission_role (id,role_id,permissions_id)
Schema::table('permission_role', function (Blueprint $table) {
$table->integer('role_id')->unsigned()->default(1);
$table->foreign('role_id')->references('id')->on('roles'); // references - указывает на какое поле ссылается данный идентификатор. мы ссылаемся на id и указываем какой таблицы.
$table->integer('permission_id')->unsigned()->default(1);
$table->foreign('permission_id')->references('id')->on('permissions');
});
Сохранение привилегии (просмотр страницы админа) для определенной роли(модератора) происходит с помощью метода "sync".
"sync" - Реализует синхронизацию связанных моделей через связующую таблицу. т.е. если какое-то поле скрыли за ненадобностью и отправили и оно не попало в реквест, то данные по этому полю будут удалены.
Метод удаления:
public function destroy(59)
{
$res = Permissions::find(59);
$res = $res->roles()->sync(59);
ретурн ок.
}
данные из связующей таблицы сперва удаляются, затем пытается сделать какойто инсерт
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`corporate`.`permission_role`, CONSTRAINT `permission_role_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`)) (SQL: insert into `permission_role` (`permissions_id`, `role_id`) values (59, 59))
т.е. было:
идАдмин привилегия59
идМодер привилегия59
идСобака привилегия59
и пытается заинсертить
привилегия59 привилегия59
притом запись в удаляемой привилегии так и осталась в таблице permissions
ни до какого $res->delete(); дело не доходит..
спасибо!)
сделал вот так
public function render($request, Exception $exception)
{
foreach ($request->server as $k => $val){
if ($k == "REDIRECT_STATUS" && $val == 200){
return redirect('/login');
}
}
return parent::render($request, $exception);
}
Здравствуйте! у всех при потере сессии Laravel отображает шаблон 419.blade.php
Не могу найти, где написать редирект на страницу Login минуя этот 419..
я еще ток вдупляю php и чето мне подсказывает, что тебе нужно именно это https://www.youtube.com/watch?v=YORueJt … R&index=55 тут чел создает сайт, в котором есть у него главный макет и вкрапления каких ему надо блоков.. в следующем 56 уроке он в конце создает функцию renderOutput в которой переназначает блоки для той или иной страницы и генерит результирующую страницу.. полистай видюхи, проследи че он делает.
Слушай, если я не ошибаюсь, после версии 5.2 ларавелевские сессии нельзя передавать в контроллеры и миделвары.. миделварь сам рулит сессией.. тебе нужно самому передать в него ид пользователя и в нем уже сравнивать может он или не может отправлять запрос.
public function handle($request, Closure $next, $adminId)
https://laravel.ru/forum/viewtopic.php?id=2907 тут в комментах я написал как туда передать пользователя
Попробуй вместо
Auth::check()
auth()->check() и auth()->user()->id везде
deleted
только все равно редирект срабатывает при "===" сравнении. меняю на "==" и все норм. даже если заменить на auth()->user()->id
Спасибо, исправил на ваш вариант.
мож кому будет полезно.. С помощью middleware проверяю на Админа:
командой создал мидлварь php artisan make:middleware isAdmin
и в Kernel:
в $middlewareGroups Добавил
'admin' => [
'isAdmin:1', // 1 - это айдишник админа в users. так передаются параметры
],
в protected $routeMiddleware = [ Добавил
'isAdmin' => \Corp\Http\Middleware\isAdmin::class,
ну и в самом классе isAdmin у меня:
<?php
namespace Corp\Http\Middleware;
use Closure;
class isAdmin
{
public function handle($request, Closure $next, $admin_user_id)
{
if (auth()->check() && (auth()->user()->id == $admin_user_id)) { // если залогинен и админ
return $next($request);
} elseif (auth()->check() && (auth()->user()->id !== $admin_user_id)){ // если залогинен но не админ
return redirect('/');
}
return redirect('/');
}
}
на вот тебе еще, вдохновляйся
https://goo.gl/cgUSck сотка уроков на русском языке. там версия 5.2, но до сих пор (5.5) актуально. различия все указаны в комментах под видео. сам лично проверял до 82 урока, в кратчайшие сроки
п.с. убежал за попкорном
да.. тоже это нашли.
https://laracasts.com/discuss/channels/ … onstructor
Thing is controller construct executes before any middleware, so there is no user yet
крутяк блин.. думал будет проще.
и спасибо что не оставили в стороне
Laravel 5.5 винда7
я новичок. все руты рабочие, логинюсь, регаюсь и т.д. с помощью (php artisan make:auth) за исключением вот этой группы:
проблема в следующем:
имеется рут '/admin'
Route::group(['prefix' => 'admin', 'middleware' => ['auth']], function () {
Route::get('/', 'Admin\IndexController@index')->name('adminIndex');
Route::resource('/articles', 'Admin\ArticlesController');
});
есть контроллер с конструктором.
use Illuminate\Support\Facades\Auth;
....
public function __construct()
{
// $r = Auth::user();
// dd($r);
$this->user = Auth::user();
if (!$this->user) {
abort(403);
}
}
$this->user возвращает 403. если проверить через dd то в $r будет null.
в этом же контроллере, в любой другой функции если сделать проверку
$r = Auth::user();
dd($r);
модель пользователя отображается.
более того, если оставить проверку в __конструкторе, то (php artisan route:list) выдает ошибку [Symfony\Component\HttpKernel\Exception\HttpException]
и список рутов уже не формируется..
лично мои догадки, что middleware править надо. но че и как там править пока не понимаю..
пробовал менять auth на web результат такой же..
вот мой мидлварь
<?php
namespace Corp\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\Corp\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Corp\Http\Middleware\TrustProxies::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\Corp\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Corp\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \Corp\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
}
я, собственно, хочу формировать меню для админа, и только он его должен видеть. но из за проблемы с моделью пользователя всё моё меню ругается что не один из рутов не существует..
public function getMenu()
{
return LavMenu::make('adminMenu', function ($menu) {
$r = Auth::user();
dd($r);
$menu->add('Статьи', array('route' => 'admin.articles.index'));
$menu->add('Портфолио', array('route' => 'admin.articles.index'));
$menu->add('Меню', array('route' => 'admin.articles.index'));
$menu->add('Пользователи', array('route' => 'admin.articles.index'));
$menu->add('Привилегии', array('route' => 'admin.articles.index'));
});
}
вот все мои сейчас руты
+--------+-----------+-------------------------------+----------------------+-------------------------------------------------------------------------+----------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------------+----------------------+-------------------------------------------------------------------------+----------------------------------------------+
| | GET|HEAD | / | home | Corp\Http\Controllers\IndexController@index | web |
| | GET|HEAD | _debugbar/assets/javascript | debugbar.assets.js | Barryvdh\Debugbar\Controllers\AssetController@js | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/assets/stylesheets | debugbar.assets.css | Barryvdh\Debugbar\Controllers\AssetController@css | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/clockwork/{id} | debugbar.clockwork | Barryvdh\Debugbar\Controllers\OpenHandlerController@clockwork | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/open | debugbar.openhandler | Barryvdh\Debugbar\Controllers\OpenHandlerController@handle | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | admin | adminIndex | Corp\Http\Controllers\Admin\IndexController@index | web,auth |
| | GET|HEAD | admin/articles | articles.index | Corp\Http\Controllers\Admin\ArticlesController@index | web,auth |
| | POST | admin/articles | articles.store | Corp\Http\Controllers\Admin\ArticlesController@store | web,auth |
| | GET|HEAD | admin/articles/create | articles.create | Corp\Http\Controllers\Admin\ArticlesController@create | web,auth |
| | GET|HEAD | admin/articles/{article} | articles.show | Corp\Http\Controllers\Admin\ArticlesController@show | web,auth |
| | PUT|PATCH | admin/articles/{article} | articles.update | Corp\Http\Controllers\Admin\ArticlesController@update | web,auth |
| | DELETE | admin/articles/{article} | articles.destroy | Corp\Http\Controllers\Admin\ArticlesController@destroy | web,auth |
| | GET|HEAD | admin/articles/{article}/edit | articles.edit | Corp\Http\Controllers\Admin\ArticlesController@edit | web,auth |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | articles | articles.show | Corp\Http\Controllers\ArticleController@show | web |
| | GET|HEAD | login | login | Corp\Http\Controllers\Auth\LoginController@showLoginForm | web,guest |
| | POST | login | | Corp\Http\Controllers\Auth\LoginController@login | web,guest |
| | POST | logout | logout | Corp\Http\Controllers\Auth\LoginController@logout | web |
| | POST | password/email | password.email | Corp\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | password.request | Corp\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | Corp\Http\Controllers\Auth\ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | Corp\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | portfolios | portfolios.show | Corp\Http\Controllers\PortfolioController@show | web |
| | GET|HEAD | register | register | Corp\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest |
| | POST | register | | Corp\Http\Controllers\Auth\RegisterController@register | web,guest |
| | GET|HEAD | test | test | Corp\Http\Controllers\TestController@test | web |
+--------+-----------+-------------------------------+----------------------+-------------------------------------------------------------------------+----------------------------------------------+
может есть идеи куда хотяб копать? весь день промучился с этой проблемой..
свою пробему решил. не актуально
нашел вот такую полезность http://klisl.com/laravel_lavary_menu.html
Пробую сделать меню по видео уроку https://youtu.be/hc7Ty3yDtrk?t=19m34s
у автора работает (версия 5.2), у меня ругается на строку (версия 5.5)
$mBuilder = Menu::make('MyNav', function($m) use ($menu) {
Пишет:
Type error: Argument 1 passed to Illuminate\Database\Eloquent\Builder::make() must be of the type array, string given, called in /home/vagrant/Code/corporate.loc/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 1417
а именно:
public function make(array $attributes = [])
{
return $this->newModelInstance($attributes);
}
что я мог сделать не так?
в документации тоже не массив передают, а колбек функцию
https://github.com/lavary/laravel-menu#installation
Here is a basic usage:
Menu::make('MyNavBar', function($menu){
$menu->add('Home');
$menu->add('About', 'about');
$menu->add('services', 'services');
$menu->add('Contact', 'contact');
});
----
и еще вопрос. можно ли из модели получить название таблицы?
лично я (нубас) делал все по видео уроку https://youtu.be/zu-ZniGhogw и все прекрасно работает.
.env
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=2cb975f571cd30
MAIL_PASSWORD=2e5cd5d03b5b30
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=test@yandex.ru
MAIL_FROM_NAME="test app"
mail.php
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
возможно еще какието гдето настройки нужны. сечас уже плохо помню, посмотри видео, там все просто даже для новичка
ну и вот функция отправки
// Send Email
private function send_email($test, $msg)
{
$user = User::findOrFail(2); // Письмо отправляется пользователю ID 2
if ($user) {
$params = [
'user' => $user,
'test' => $test,
'msg' => $msg,
];
Mail::send('emails.user.email_send', $params, function ($m) use ($user) { // юзаю шаблон, передаю параметры, выполняю функцию
$m->from('hello@app.com', 'Your Application');
$m->to($user->email, $user->name)->subject('Тема сообщения:');
});
return json_encode(['success' => TRUE, 'data' => 'ok']);
} else {
return json_encode(['success' => FALSE, 'data' => 'false']);
}
}
так же рекомендую вам 100 видео уроков по ларавелю https://laravel.ru/forum/viewtopic.php?id=2799
Доброго времени суток, уважаемые!
Спасение утопающих, дело рук самих утопающих..
Изучаю Laravel 5.5 , и складывается впечатление, что документация больше походит на "записки программиста", нежели "документацию".. примеров явно не хватает.
аля "если там почесать и тут подоткнуть, то у вас все получится. Удачи!" чего чесать, куда подтыкать.. в общем без скила тут черт ногу сломит.
Многие из нас через это прошли/проходят/будут проходить.. собственно поэтому мы тут и оказались)
Сегодня обнаружил прям радость для себя.. не могу с вами не поделиться
100 уроков по ларавелю. треть уроков - разбор документации!!! две трети 2 проекта.
Устройство аутентификации, Middleware и другое. на доступном языке без причмокиваний и прочих эротических звуков...
https://www.youtube.com/watch?v=nWo5vHk … o2ldxWWtJR Laravel 5.2 но те кто шарят, понимают что материал на 97% актуален по сей 5.5 день. проблемные видео с мелкими расхождениями версий я прокомментировал под видео 55.
Предлагаю все самое простое и доступное и главное Проверенное! выкладывать сюда
П.С. с английским у меня так себе, поэтому если кто поднимет такой же ресурс на англоязычном, то тоже будет здорово. лично я пару уроков выполнил по англоязычным роликам. например этого парня https://youtu.be/zu-ZniGhogw и данный ролик у меня до сих пор в действии. если у кого возникнут трудности - обращайтесь, подскажу. пока свежо в памяти
____
и сразу же дополню, для начинающих: простые и понятные примеры, по Middleware на англ. лично вчера повторил, всё просто и доступно.
https://youtu.be/5jJGyEaY0Is
https://youtu.be/OojEiKsVIj0