Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Есть нужда реализовать механизм заполнения договоров на основе типового шаблона.
Я вижу это так.
В БД делаю таблицу Вид_Договоров. Каждый вид имеет шаблон с текстовым полем: наполнение и спец ключи для вставки параметров.
Например: Настоящий договор заключен между [Org name] далее Продавец и [Partner name] далее Покупатель. Сумма договора: [text_area 1]. Срок договора [combo_box 1]. Примечание [text_area 2]... и т.д.
При создании нового договора выбирается вид договора и читается из БД соответствующий шаблон. Шаблон парсится на текст и параметры. Текст отображается пользователю без возможности редактирования, параметры выбираются-заполняются пользователем. Дальше договор на печать и в БД.
Буду рад советам /критике /ссылкам на что-то похожее.
Не работает так как в уроке
https://laracasts.com/series/laravel-5- … pisodes/22 начиная с 10:30
Редактирует статью. Теги статьи которые были в статье, должны выделятся серым.
У меня в модели:
public function getTagListAttribute(){
return $this->tags->lists('id');
}
В шаблоне:
<div class="form-group">
{!! Form::label('tag_list','Теги:') !!}
{!! Form::select('tag_list[]',$tags, null, ['class' => 'form-control', 'multiple']) !!}
</div>
А вот так выделение работает:
{!! Form::select('tag_list[]',$tags, 1, ['class' => 'form-control', 'multiple']) !!}
Интересует pagination с точки зрения нагрузки на БД.
имеем конструкцию вида $users = DB::table('users')->paginate(15);
Обращение к БД будет сразу ко всем $users? Или они будут подгружаться по переходу к новой странице?
При очень большом количестве $users не приведет ли такая конструкция к высокой нагрузке на сервер. И если да, как правильно ограничить запрос например 100-ми записями из БД?
DB::table('users')->take(100)->paginate(15); - вроде как не сработало.
имеем 2 условия которые должны выполняться одновременно (оператор AND) для начала нового отсчета:
- прошел год
- нового номера еще нет
Прошел ли год можно узнать по разнице между текущей датой и датой начала отсчета.
Нового номера еще нет по условию $number > 0;
После обнуления номера не забудьте обновить дату начала отсчета до 10.07.текущего года.
kenan65 пишет:интегрировать Mysql готовую базу данных в Laravel
очень интересно, что ты под этим понимаешь. Уточни.
Laravel не имеет своей БД. Он может работать с различными БД в том числе и MySQL. У Laravel есть удобный функционал, заменяющий SQL запросы, но это не значит что Вы не можете пользоваться прямыми запросами.
Попробую прокомментировать Ваш код.
public function postRegister(Request $request, MailQueue $mailer)
{
$validator = $this->registrar->validator($request->all()); //"registrar->" - для 5.1 это убрать
// проверяем правильность введенных данных.
if ($validator->fails()) {
$this->throwValidationException($request, $validator);
}
/** @var User $user */
//записываем в базу нового пользователя
$user = $this->registrar->create($request->all()); //"registrar->" - для 5.1 это убрать
//генерируем URL подтверждения
$url = action('Auth\AuthController@getConfirm', [ $user->confirmation_code ]); //я понимаю генерация кода происходит в функции create(). Очень хотелось бы увидеть код !!!
//ставим письмо в очередь на отправку
$mailer->queue('emails.confirm', compact('url', 'user'), function ($message) use ($user, $url)
{
$message->to($user->email)->subject('Подтверждение регистрации');
});
//возврат после регистрации придумайте сами
return ...;
}
/**
* Подтверждение регистрации пользователем
*
* @param Request $request
* @param User $user
* @param string|null $token
*
* @return Response
*/
public function getConfirm(Request $request, User $user, $token = null)
{ //эта проверка для меня не понятна, пробел знаний:
if (is_null($token)) {
throw new NotFoundHttpException;
}
/** @var User $user */
//находим в БД пользователя
$user = $user->whereConfirmationCode($token)->first(); //буду признателен за комментарий по поводу связи кода подтверждения и токена. Имею пробел знаний.
//если не найден:
if (!$user) {
return view('auth.noconfirm')->withMessage('Пользователь с таким кодом подтверждения не найден. Если это ошибка, свяжитесь с нами.');
}
//если уже подтвержден
if ($user->confirmed) {
return view('auth.noconfirm')->withMessage('Ваш пользовательский аккаунт уже активирован. Нажмите "Войти" и введите свой логин и пароль, или воспользуйтесь восстановлением пароля.');
}
//поднимаем флаг пользователь подтвержден
$user->confirmed = true;
//записываем в БД
$user->save();
// тут пишем возврат на свой вкус
return ...;
//Ламерский вопрос. Почему не используется конструкция if - else? return обрывает выполнения кода?
}
$posts = Post::all(); - вот эта строчка у тебя зачем?
Спасибо. Попробую внедрить.
Хотелось бы немного изменить дефолтную регистрацию. В частности, нужно отсылать пользователю email с предложением подтвердить регистрацию, после подтверждения пользователь может входить. Стандартный механизм регистрации описан в трейте \project\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php
согласно логике, пользователь при отправке формы регистрации проходит валидацию контроллера \project\app\Http\Controllers\Auth\AuthController.php, и если все ок, система сразу его логинит.
Я могу переделать метод postRegister RegistersUsers.php - но меня смущает, что придется ковырять файл движка.
Или отказаться от стандартного механизма и написать свой с нуля используя Ручную аутентификацию и метод attempt? Как обычно принято делать в таких случаях?
Пришлось ковырять инглиш
Route::controller(['auth' => 'Auth\AuthController']); - это похоже в 5.1 не работает.
рекомендуют так:
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
// Registration routes...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');
ну и дальше тоже есть отличия от 5.0.
http://laravel.com/docs/5.1/authentication
версия Laravel:
php artisan -V
Laravel Framework version 5.1.1 (LTS)
Читаю доки-уроки по аутентификации в 5-м и натыкаюсь на несоответствия.
Ввиду малого опыта, процесс обучения затягивается.
Итак. Создал миграцию с таблицей users:
public function up()
{
Schema::create('users', function(Blueprint $table) {
// ID пользователя
$table->increments('id');
// E-Mail (уникальный)
$table->string('email')->unique();
// Пароль. Для используемой в Laravel хэш-функции требуется не меньше 60 символов
$table->string('password', 60);
// Никнейм
$table->string('username')->unique();
// Админ?
$table->boolean('isAdmin');
// Активирован?
$table->boolean('isActive')->index();
// Код активации аккаунта
$table->string('activationCode');
// Токен для возможности запоминания пользователя
$table->rememberToken(); // remember_token
// created_at, updated_at
$table->timestamps();
});
}
В БД таблица появилась.
Дальше создаю по уроку:
https://laracasts.com/series/laravel-5- … pisodes/15 - создаю путь:
Route::controller(['auth' => 'Auth\AuthController']);
php artisan route:list - вываливает ошибку:
Missing argument 2 for Illuminate\Routing\Router::controller(), called in F
:\OpenServer\domains\project\vendor\laravel\framework\src\Illuminate\Suppor
t\Facades\Facade.php on line 210 and defined
Смотрю доки: упоминается шаблон resources/views/auth - у себя не нахожу каталог auth
Потом в уроке ссылаются на trait AuthenticatesAndRegistersUsers
у меня он не такой как в уроке:
namespace Illuminate\Foundation\Auth;
trait AuthenticatesAndRegistersUsers
{
use AuthenticatesUsers, RegistersUsers {
AuthenticatesUsers::redirectPath insteadof RegistersUsers;
}
}
Собственно как создать простую авторизацию в 5.1.1?
http://amegatron.ru/category/laravel/po … laravel-4/
я на 5-м уровне . Там правда 4-й laravel, но оно может и полезней.
Работай на здоровье. Я не возражаю.
Посмотри папку c:\openserver\domains - появился ли у тебя там твой проект, если не появился то посмотри где он появился, возможно перед запуском создания проекта надо было перейти "cd" в папку domains. Если проект не в domains, пересоздай его опять по новой в domains. Открывай браузер и вводи nazvanie_novogo_projecta/public. Если лень набирать каждый раз public лезь в настройки openservera и прописывай путь к корневой папке сайта.
composer create-project laravel/laravel nazvanie_novogo_projecta --prefer-dist - так делали?
Написано же обнови composer. Читай внимательно. Перейди в папку php5.6 - composer self-update
ну и проект я бы одним словом называл. laravel new_blog
Gaint пишет:В Openserver есть своя командная строка. Ей и пользуйтесь.
а что за команда ?
Вы пользуетесь командной строкой системы cmd. А нужно пользоваться командной строкой openservera. В самом openserver-e - Дополнительно - командная строка.
https://laravel.ru/forum/viewtopic.php?id=996
wamp у меня на win8/64 не заработал полноценно, не открывает дочерние URL, работает только корень сайта.
В Openserver есть своя командная строка. Ей и пользуйтесь.
Для обучения лучше на 5-й смотреть, а то потом опять переучиваться.
Openserver: - установка - настройки - выбираем Php и Apache последнии версии - дополнительно- командная строка - переходим cd в папку /PHP5.6 - вводим composer self-update - устанавливаем проект Laravel "composer create-project laravel/laravel проект --prefer-dist" - опять настройки - прописываем путь к папке /проект/public. Хосты пропишутся автоматом.
Я бы так попробовал:
вместо \Slug - в начале: use App\Models\Slug, потом обращаемся: = Slug::make
\App\Models\Region::create - заменить на self::create
По остальному не понятна структура БД.
И еще, Homestead запустился, войти vagrant ssh получилось. А вот доступа по дефолтному IP 192.168.10.10 нет. IP c локальной машины не пингуется. Фаейрвол выключен. Если войти по vagrant ssh, на сервере каталог vagrant пустой, хотя согласно настройке в файле Homestead.yaml вроде как должен подхватывать мои локальные папки и файлы и помещать их в ~/home/vagrant/.
Еще работу с Homestead останавливает любовь vagranta к диску С (с:\users\user_name\). Туда закачивается образ homestead ~1GB и там хранятся проекты. Обладатели SSD небольшого объема меня поймут.
На openserver пошло. Только нужно в настройках выбирать последнюю версию Apache и PHP, а потом обновить composer из командной строки OpenSERVER-а. Домэйны с путями public прописываются в настройках OpenSERVER-а. И да. Спасибо предыдущему оратору.
поковырял wampserver как тут:
http://your3w.ru/nastroyka-lokalnogo-se … ampserver/
http://newproect - заработал,
а вот http://newproect/newpage - не хочет.
Route::any('newpage', function () {
return 'Hello Newpage';
});
Not Found
The requested URL /newpage was not found on this server.
Apache/2.4.9 (Win32) PHP/5.5.12 Server at newproect Port 80
Прям и продолжать такими черепашьими темпами желание осваивать пропадает.
Пробовал homestead - ошибка распаковки файла. Я так понимаю оно качается на С:\, сколько ему места надо? Или может можно поменять пути для образов git-bash-м на другой диск.
Route::get('newpage', function () {
return 'Hello Newpage';
});
http://localhost/newproect/public/newpage
так тоже не открывает, страница не найдена
Из английского хелпера:
Or, you may even register a route that responds to all HTTP verbs using the any method:
Route::any('foo', function () {
return 'Hello World';
});
Generating URLs To Routes
You may generate URLs to your application's routes using the url helper:
$url = url('foo'); - это куда надо вставить?
Доброго времени.
С php в общем то знаком, надо переходить на следующий уровень. Решил начать изучение фреймворков с laravel-а.
Установил на win 8.1/64 wampserver, запустил laravel 5, работает. НО...
Вот так работает: http://localhost/newproect/public/
Вот так http://localhost/newproect - открывает каталог с файлами и папками проекта
Вот так http://newproect.localhost открывает так же как и localhost страницу wampservera
Вот так http://newproect - страница не доступна
Это нормально? так и должно работать?
Дальше мне нужно вывести
http://localhost/newproect/public/newpage - получаю страница не доступна
(в роуте прописываю контроллер, в контроллере добавляю функцию newpage)
Route::get('/', array(
'as' => 'home',
'uses' => 'IndexController@getIndex'
));
Route::get('newpage', 'IndexController@newpage');
Контроллер:
<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller;
class IndexController extends Controller {
public function getIndex() {
return view('index');
}
public function newpage() {
return 'Hello newpage';
}
}
Куда смотреть? В сторону warmservera или настройки laravela?