<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Joomla! - Open Source Content Management" -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Tutoriais - RibaFS Portal</title>
		<description><![CDATA[Servidores linux, Programação web (PHP, Joomla, CakePHP, Laravel), Programação Mobile (Phaser, PhoneGap, Monaca, Unity, etc) entre outros.]]></description>
		<link>http://backup/portal/frameworks/laravel-5/tutoriais.html</link>
		<lastBuildDate>Sat, 07 Sep 2019 19:00:45 -0300</lastBuildDate>
		<generator>Joomla! - Open Source Content Management</generator>
		<atom:link rel="self" type="application/rss+xml" href="http://backup/portal/frameworks/laravel-5/tutoriais.feed?type=rss"/>
		<language>pt-br</language>
		<item>
			<title>Crud-generator</title>
			<link>http://backup/portal/frameworks/laravel-5/tutoriais/crud-generator.html</link>
			<guid isPermaLink="true">http://backup/portal/frameworks/laravel-5/tutoriais/crud-generator.html</guid>
			<description><![CDATA[<p style="text-align: justify;"><strong>Gerador de Cruds para o Laravel 5</strong></p>

<p style="text-align: justify;">Depois de muito procurar e testar pacotes para geração de crud, encontrei este, que funciona bem e ajuda muito na criação de CRUDs básicos, já com o Bootstrap, paginação e busca.</p>

<p style="text-align: justify;"><a href="https://github.com/appzcoder/crud-generator">https://github.com/appzcoder/crud-generator</a></p>

<p style="text-align: justify;"><strong>Passos para a instalação</strong><br /><br />composer require appzcoder/crud-generator --dev<br /><br />Em app/Providers/AppServiceProvider.php:<br /><br />public function register()<br />{<br />    if ($this-&gt;app-&gt;environment() == 'local') {<br />        $this-&gt;app-&gt;register('Appzcoder\CrudGenerator\CrudGeneratorServiceProvider');<br />    }<br />}<br /><br />composer require laravelcollective/html<br /><br />Add Provider config/app.php<br /><br />        Collective\Html\HtmlServiceProvider::class,<br /><br />Aliases<br /><br />        'Form' =&gt; Collective\Html\FormFacade::class,<br />        'HTML' =&gt; Collective\Html\HtmlFacade::class,<br /><br />composer dump-autoload<br /><br />Publicar o pacote do vendor:<br />php artisan vendor:publish --provider="Appzcoder\CrudGenerator\CrudGeneratorServiceProvider"</p>

<p style="text-align: justify;">Está instalado e pronto para usar.</p>

<p style="text-align: justify;"><br /><strong>Exemplos de uso:</strong></p>

<p style="text-align: justify;">Posts<br />php artisan crud:generate Posts --fields="user_id#integer; title#string; description#text;" --view-path="" --controller-namespace="" --route-group=""<br /><br />Noticias<br />php artisan crud:generate Noticias --fields="usuario_id#integer; titulo#string; descricao#text;" --view-path="" --controller-namespace="" --route-group=""<br /><br />Posts<br />php artisan crud:generate Posts --fields="title#string; content#text; category#select#options=technology,tips,health" --view-path=admin --controller-namespace=Admin --route-group=admin</p>

<p style="text-align: justify;">Comments<br />php artisan crud:generate Comments --fields="post_id#integer; content#text;" --view-path="" --controller-namespace="" --route-group=""<br /><br />Criar banco e configurar no .env<br />php artisan migrate<br /><br />Clientes<br />php artisan crud:generate Clientes --fields="nome#string; email#string;" --view-path=admin --controller-namespace=Admin --route-group=admin<br /><br />php artisan migrate<br /><br />Funcionarios<br />php artisan crud:generate Funcionarios --fields="nome#string; email#string;" --view-path="admin" --controller-namespace=Funcionarios --route-group=admin<br />Master a rota funcionarios/funcionarios, caso contrário não encontra<br /><br />php artisan migrate</p>

<p style="text-align: justify;">Produtos<br />php artisan crud:generate Produtos --fields="nome#string; descricao#string; preco#float" --view-path="site" --controller-namespace=Produtos --route-group=site<br /><br />Criar no raiz (fora de site ou admin)<br />php artisan crud:generate Pedidos --fields="produto#string; quantidade#integer;" --view-path="" --controller-namespace=Pedidos --route-group=""<br /><br />Editar a migration, para limitar o tamanho dos campos e outras características como nullable()<br /><br />Outros comandos (opcionais):<br />php artisan crud:controller PostsController --crud-name=posts --model-name=Post --view-path="directory" --route-group=admin<br /><br />For model:<br />php artisan crud:model Post --fillable="['title', 'body']"<br /><br />For migration:<br />php artisan crud:migration posts --schema="title#string; body#text"<br /><br />For view:<br />php artisan crud:view posts --fields="title#string; body#text" --view-path="directory" --route-group=admin<br /><br />php artisan migrate<br /><br />Adicionando uma rota<br />Route::resource('posts', 'PostsController');<br /><br />Supported Field Types<br /><br />These fields are supported for migration and view's form:<br />Form Field Types:<br /><br />    text<br />    textarea<br />    password<br />    email<br />    number<br />    date<br />    datetime<br />    time<br />    radio<br />    select<br />    file<br /><br />Migration Field Types:<br /><br />    string<br />    char<br />    varchar<br />    date<br />    datetime<br />    time<br />    timestamp<br />    text<br />    mediumtext<br />    longtext<br />    json<br />    jsonb<br />    binary<br />    integer<br />    bigint<br />    mediumint<br />    tinyint<br />    smallint<br />    boolean<br />    decimal<br />    double<br />    float<br />    enum<br /><br />php artisan crud:generate Posts --fields="user_id#integer; title#string; description#text;" --view-path="" --controller-namespace="" --route-group=""<br /><br /><br />            $table-&gt;string('name')-&gt;unique();<br />            $table-&gt;string('slug')-&gt;unique();<br />            $table-&gt;text('description')-&gt;nullable();<br /><br /><br />        Schema::create('posts', function (Blueprint $table) {<br />            $table-&gt;increments('id');<br /><br />            $table-&gt;integer('user_id')-&gt;unsigned();<br />            $table-&gt;foreign('user_id')-&gt;references('id')-&gt;on('users')-&gt;onDelete('cascade');<br /><br />            $table-&gt;string('title');<br />            $table-&gt;text('description');<br /><br />            $table-&gt;timestamps();<br /><br />        });<br /><br />Model<br />php artisan crud:model Post --fillable="['title', 'body']"<br /><br />Migration<br />php artisan crud:migration posts --schema="title#string; body#text"<br /><br />View<br />php artisan crud:view posts --fields="title#string; body#text" --view-path="directory" --route-group=admin<br /><br /></p>]]></description>
			<category>Tutoriais</category>
			<pubDate>Sun, 25 Jun 2017 21:08:35 -0300</pubDate>
		</item>
		<item>
			<title>Migrations no Laravel</title>
			<link>http://backup/portal/frameworks/laravel-5/tutoriais/migrations-no-laravel.html</link>
			<guid isPermaLink="true">http://backup/portal/frameworks/laravel-5/tutoriais/migrations-no-laravel.html</guid>
			<description><![CDATA[<p><strong>Migrations é um recurso que cria a estrutura das tabelas em código e após um comando ele cria as tabelas no banco.</strong></p>


<p>Também permite remover as tabelas do banco e recriar com grande flexibilidade.</p>


<p>No Laravel 5 as migrations ficam no diretório<br />/database/migrations<br /><br /><strong>Detalhes:</strong><br /><a href="https://laravel.com/docs/5.4/migrations">https://laravel.com/docs/5.4/migrations</a> <br /><br /><strong>Criar a migrate já com a estrutura básica</strong><br />php artisan make:migration create_users_table --create=users<br /><br />Criar a primeira tabela<br />php artisan make:migration create_produto_table<br /><br />php artisan migrate:reset - <strong>apagar todas as tabelas</strong><br /><br />php artisan migrate:refresh - <strong>recriar e popular todas as tabelas</strong><br /><br />php artisan migrate:rollback --step-1<br /><br /><strong>Após o comando mirgation, edite o arquivo gerado em database/migrations e adicione os campos da tabela.</strong><br />Abrir o arquivo e criar os campos no método up:<br /><br />    Schema::create('produto', function(Blueprint $table){<br />        $table-&gt;increments('id');<br />        $table-&gt;string('name', 100);<br />        $table-&gt;integer('number');<br />        $table-&gt;boolean('active');<br />        $table-&gt;string('image', 200)-&gt;nullable();        <br />        $table-&gt;enum('category', ['eletronicos', 'moveis', 'limpeza', 'banho']);<br />        $table-&gt;text('description');<br />        $table-&gt;timestamps();<br />        $table-&gt;softDeletes(); //só marca para deleção<br />    });<br /><br />Campos date usar nullable();<br /><br />Método down()<br /><br />    Schema::drop('produto');<br /><br /><br />Criar migration e mudar nome<br />php artisan miration create_telefones_table --create telefones<br /><br />Criar as tabelas no banco a partir da migration<br />php artisan migrate<br /><br />Após efetuar alterações na estrutura da tabela da migration executar:<br />php artisan migrate:refresh (apaga tudo e recria)<br /><br /><br /><strong>Seeds - popular banco de dados</strong></p>


<p>Estes populam as tabelas com dados de teste e ficam no diretório:<br />database/seeds<br /><br /><strong>Detalhes:</strong><br /><a href="https://laravel.com/docs/5.4/seeding">https://laravel.com/docs/5.4/seeding</a></p>


<p>Sintaxe:<br />php artisan make:seeder UserTableSeeder<br /><br /><br />use App\User;<br /><br />public function run(){<br />    User::create([<br />        'name' =&gt; 'Carlos Ferreira',<br />        'email' =&gt; 'carlos@carlos.com',<br />        'password' =&gt; bcrypt('123456')<br />    ])<br />}<br /><br />Editar o arquivo<br />seeds/DatabaseSeeder.php<br /><br />E mudar a linha:<br />$this-&gt;call(UserTableSeeder::class);<br /><br /><strong>Criar o seed (popula todas as tabelas criadas):</strong><br />php artisan db:seed<br /><br />Criar o model e a migration, já com parte do método up<br />php artisan make:model Produtos -m<br /><br />php artisan help make:migration<br /><br />Para apagar as tabelas criadas<br />php artisan migrate:reset<br /><br />Criar as tabelas novamente<br />php artisan migrate:refresh<br /><br />    public function up()<br />    {<br />        Schema::create('livros', function(Blueprint $table) {<br />            $table-&gt;increments('id');<br />            $table-&gt;string('isbn',20);<br />            $table-&gt;integer('autore_id')-&gt;unsigned();<br />            $table-&gt;string('titulo',40);<br />            $table-&gt;timestamps();<br />            $table-&gt;foreign('autore_id')-&gt;references('id')-&gt;on('autores')-&gt;onDelete('cascade')-&gt;onUpdate('cascade');<br />        });<br />    }<br /><br /><strong>Seed somente para uma tabela/classe</strong><br />php artisan db:seed --class=UserTableSeeder<br /><br />Ao deletar um autor deleta todos os livros relacionados a ele (onDelete('cascade')).<br /><br />            $table-&gt;foreign('user_id')-&gt;references('id')-&gt;on('users')<br />                -&gt;onUpdate('cascade')<br />                -&gt;onDelete('cascade');<br /><br />            $table-&gt;foreign('classroom_id')-&gt;references('id')-&gt;on('classrooms')<br />                -&gt;onUpdate('cascade')<br />                -&gt;onDelete('set null');<br /><br />class CreateRolesPermissionsTables extends Migration<br />{<br />    /**<br />     * Run the migrations.<br />     *<br />     * @return void<br />     */<br />    public function up()<br />    {<br />        Schema::create('roles', function (Blueprint $table) {<br />            $table-&gt;increments('id');<br />            $table-&gt;string('name');<br />            $table-&gt;string('label')-&gt;nullable();<br />            $table-&gt;timestamps();<br />        });<br /><br />        Schema::create('permissions', function (Blueprint $table) {<br />            $table-&gt;increments('id');<br />            $table-&gt;string('name');<br />            $table-&gt;string('label')-&gt;nullable();<br />            $table-&gt;timestamps();<br />        });<br /><br />        Schema::create('permission_role', function (Blueprint $table) {<br />            $table-&gt;integer('permission_id')-&gt;unsigned();<br />            $table-&gt;integer('role_id')-&gt;unsigned();<br /><br />            $table-&gt;foreign('permission_id')<br />                -&gt;references('id')<br />                -&gt;on('permissions')<br />                -&gt;onDelete('cascade');<br /><br />            $table-&gt;foreign('role_id')<br />                -&gt;references('id')<br />                -&gt;on('roles')<br />                -&gt;onDelete('cascade');<br /><br />            $table-&gt;primary(['permission_id', 'role_id']);<br />        });<br /><br />        Schema::create('role_user', function (Blueprint $table) {<br />            $table-&gt;integer('role_id')-&gt;unsigned();<br />            $table-&gt;integer('user_id')-&gt;unsigned();<br /><br />            $table-&gt;foreign('role_id')<br />                -&gt;references('id')<br />                -&gt;on('roles')<br />                -&gt;onDelete('cascade');<br /><br />            $table-&gt;foreign('user_id')<br />                -&gt;references('id')<br />                -&gt;on('users')<br />                -&gt;onDelete('cascade');<br /><br />            $table-&gt;primary(['role_id', 'user_id']);<br />        });<br />    }<br /><br />    /**<br />     * Reverse the migrations.<br />     *<br />     * @return void<br />     */<br />    public function down()<br />    {<br />        Schema::drop('permission_role');<br />        Schema::drop('role_user');<br />        Schema::drop('roles');<br />        Schema::drop('permissions');<br />    }<br />}</p>]]></description>
			<category>Tutoriais</category>
			<pubDate>Sun, 25 Jun 2017 21:08:35 -0300</pubDate>
		</item>
		<item>
			<title>Laravel - Controller </title>
			<link>http://backup/portal/frameworks/laravel-5/tutoriais/laravel-controller.html</link>
			<guid isPermaLink="true">http://backup/portal/frameworks/laravel-5/tutoriais/laravel-controller.html</guid>
			<description><![CDATA[<p><strong>Controllers - Têm a responsabilidade de controlar o fluxo das informações, para as views e models.</strong><br /><br /><strong>Métodos padrões de um controller, quando criado com a opção --resource</strong><br /><br />index - lista todos os registros disponíveis<br />create - chama a view create, que é um form (create.blade.php) para adicionar um registro<br />store - armazena no banco o registro do form em create, antes validando seus campos<br />show - mosra um único registro através da view show.blade.php<br />edit - chama o form na view edit.blade.php para editar um registro<br />update - Sua função é armazenar no banco o registro alterado na view acima<br />destroy - permite excluir um registro<br /><br /><strong>Criar um controller numa pasta específica</strong><br />php artisan make:controller Painel\\PainelController<br /><br /><strong>Criar controller com esqueleto de métodos default</strong><br />php artisan make:controller SiteController --resource<br /><br />Exemplos:<br />Route::get('/', 'SiteController@index');<br /><br />public function index()(<br />{<br />    return 'Home page do site';<br />}<br /><br />Route::get('contato', 'SiteController@contato');<br /><br />public function contato()(<br />{<br />    return 'Home page de contato';<br />}<br /><br />public function index(Request $request)<br />{<br />    return view('tarefas.index');<br />}<br /><br />Criar controle e também um método<br />php artisan make:controller PhotoController --resource --model=Photo<br /><br />Route::resource('photo', 'PhotoController', ['only' =&gt; [<br />    'index', 'show'<br />]]);<br /><br />Route::resource('photo', 'PhotoController', ['except' =&gt; [<br />    'create', 'store', 'update', 'destroy'<br />]]);<br /><br />Route::put('user/{id}', 'UserController@update');<br /><br /><br /><strong>Criar um controller SiteController</strong><br /><br />Criar um método index() que chama a view:<br /><br />public function index()<br />{<br />    return view('welcome')<br />}<br /><br /><strong>Alterar o route</strong><br /><br />Route::get('/', 'SiteController@index');<br /><br /><br /><strong>Controller com Model</strong><br /><br />&lt;?php<br /><br />namespace App\Http\Controllers;<br />use DB;<br />use App\Carro;<br /><br />class ProdutosController extends Controller<br />{<br />    public function index()<br />    {<br />        // Retornar todos os registros da tabela carros<br />        $carros = Carro-&gt;get();    <br />        return view('index', ['carros' =&gt; $carros]);<br />    }<br /><br />}<br /><br /><br />namespace App\Http\Controllers;<br />use DB;<br /><br />class ProdutosController extends Controller<br />{<br />    public function index()<br />    {<br />        // Retornar todos os registros da tabela carros<br />        $carros = DB::table('carros')-&gt;get();    <br />        return view('index', ['carros' =&gt; $carros]);<br />    }<br /><br />}<br /><br /><br />//Adicionando novo registro<br />public function store(Request $request)<br />{<br />    $this-&gt;validate($request, [<br />        'name' =&gt; 'required|max:255',<br />    ]);<br /><br />    // Create The Task...<br />}<br /><br />public function store(Request $request)<br />{<br />    $this-&gt;validate($request, [<br />        'name' =&gt; 'required|max:255',<br />    ]);<br /><br />    $request-&gt;user()-&gt;tasks()-&gt;create([<br />        'name' =&gt; $request-&gt;name,<br />    ]);<br /><br />    return redirect('/tasks');<br />}<br /><br /><strong>Criando uma pasta para controllers e movendo para ela um controller</strong><br /><br />Http<br />    Painel<br />    Site<br />        SiteController.php<br /><br />Mudar o namespace do controller<br /><br />namespace App\Http\Controllers\Site;<br /><br />use App\Http\Controllers\Controller;<br /><br />Mudar o namespace nas rotas<br /><br />Route::get('/', 'Site\SiteController@index');<br /><br />Ou criar uma rota de grupo com o novo namespace<br /><br />Route::group(['namespace' =&gt; 'site'], function(){<br />    Route::get('/', 'SiteController@index');<br />    Route::get('contato', 'SiteController@contato')-&gt;middleware('auth');<br />});<br /><br />Assim todos os métodos/rotas exigem autenticação<br />public function __construct()<br />{<br />    $this-&gt;middleware('auth');<br />}<br /><br />Ou<br />Somente alguns métodos/rotas exigirão autenticação<br />    $this-&gt;middleware('auth')<br />            -&gt;only([<br />                'contato',<br />                'categoria'<br />            ]);<br /><br />Ou filtrando com except<br />    $this-&gt;middleware('auth')<br />            -&gt;except([<br />                'contato',<br />                'index'<br />            ]);<br /><br />Adicionar outro controller, adicionando seu namespace<br />public function store(Request $request, \App\User $user)<br />{<br />    <br />}<br /><br />public function index()<br />{<br />    $teste = 123;<br />    $teste2 = 132;<br />    $teste3 = 321;<br />    return view('teste', compact('teste', 'teste2', 'teste3'));<br />}<br /><br /><strong>Ao criar as views, criar pastas correspondentes às dos controllers:</strong><br /><br />painel<br />site<br /><br />    return view('site.teste', compact('teste', 'teste2', 'teste3'));<br /><br /><br /><strong>Criar formulário de cadastro</strong><br /><br />Criar nova rota (mudar para que esta seja a primeira rota)<br /><br />Route::get('produtos/testes', 'Produtos\ProdutoController@testes');<br /><br />Editar o controller e adicionar o método testes()<br /><br />Adicionar use do Model no controller:<br />use App\Models\Produto;<br /><br />Adicionar construtor<br /><br />private $produto;<br /><br />public function __construct(Produto $produto)<br />{<br />    $this-&gt;produto = $produto;<br />}<br /><br />O index muda para:<br /><br />public function index()<br />{<br />    $produtos = $this-&gt;produto-&gt;all();<br />    return view('produtos.index');<br />}<br /><br />Criar método teste<br /><br />public function testes()<br />{<br />    $prod = $this-&gt;produto;<br />    $prod-&gt;nome = 'Nome do produto';<br />    $prod-&gt;number = 123432;<br />    $prod-&gt;active = true;<br />    $prod-&gt;category = 'eletronicos';<br />    $prod-&gt;description = 'Descrição do produto';<br />    $insert = $prod-&gt;save();<br /><br />    if ($insert)<br />        return 'Inserido com sucesso';<br />    else<br />        return 'Falha ao inserir';<br />}<br /><br />Outra forma:<br /><br />    $this-&gt;produto-&gt;insert([<br />        'nome' =&gt; 'Nome do produto',<br />        'number' =&gt;<br />        ...<br />    ])<br /><br />Existem vários métodos assim: create(), <br /><br />O create é importante pois obriga a existência de uma relação de colunas a adicionar ao banco<br />A relação de campos a serem preenchidos fica no model, assim:<br /><br />protected $fillable = [<br />    'nome', 'number', 'active', 'categoty', 'description'<br />];<br /><br /><br /><strong>Update do registro 5</strong><br /><br />$prod = $this-&gt;produto-&gt;find(5);<br /><br />Debugar<br /><br />dd($prod); // Não precisa de exit<br /><br />dd($prod-&gt;nome);<br /><br />    $prod = $this-&gt;produto-&gt;find(5);<br />    $prod-&gt;nome = 'Nome Update';<br />    $prod-&gt;number = 123432;<br />    $prod-&gt;active = true;<br />    $prod-&gt;category = 'eletronicos';<br />    $prod-&gt;description = 'Descrição do produto';<br />    $update = $prod-&gt;save();<br /><br />    if ($update)<br />        return 'Atualizado com sucesso';<br />    else<br />        return 'Falha ao atualizar';<br /><br /><strong>Usamos o método save() também para atualizar</strong><br /><br />Outra forma é usando o método update() (requer lista de campos)<br /><br />    $prod = $this-&gt;produto-&gt;find(6);<br />    $prod-&gt;update([<br />        'nome' =&gt; 'Nome do produto6',<br />        'number' <br />        ...<br />    ]);<br /><br /><strong>Outro método útil para retornar por outro campo:</strong><br /><br />    $prod = $this-&gt;produto<br />            -&gt;where('nome', 'João Brito')<br />            -&gt;where('number', 123543);<br /><br />Delete<br /><br />    $prod = $this-&gt;produto-&gt;find(3)-&gt;delete();<br />ou<br />    $prod = $this-&gt;produto-&gt;find(6);<br />    $delete = $prod-&gt;delete();<br /><br />ou<br /><br />    $prod = $this-&gt;produto-&gt;find(6);<br />    $delete = $prod-&gt;destroy();<br /><br />ou<br />    $prod = $this-&gt;produto-&gt;destroy(3);<br />ou<br />    $prod = $this-&gt;produto-&gt;destroy([3,5,8]);<br /><br />ou<br />    $delete = $this-&gt;produto-&gt;where('number', 123654)-&gt;delete();<br /><br /><strong>Melhorar CSS</strong><br /><br />Criar paste template em views/produtos<br />Criar nesta pasta o arquivo template.blade.php, contendo<br /><br />&lt;table&gt;<br />    &lt;head&gt;<br />        &lt;title&gt;{{$title or 'Curso de Laravel 5.3'}}&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />        @yield('content')<br /><br />    &lt;/body&gt;<br />&lt;/html&gt;<br /><br />Em views/produtos criar<br />index.blade.php, contendo<br /><br />@extends('produtos.templates.template')<br /><br />@section('content')<br />    &lt;table&gt;<br />        &lt;tr&gt;<br />            &lt;th&gt;Nome&lt;/th&gt;<br />            &lt;th&gt;Descrição&lt;/th&gt;<br />        &lt;/tr&gt;<br />        @foreach($produtos as $produto)<br />        &lt;tr&gt;<br />            &lt;td&gt;{{$produto-&gt;nome}}&lt;/td&gt;<br />            &lt;td&gt;{{$produto-&gt;descricao}}&lt;/td&gt;<br />        &lt;/r&gt;<br />        @endforeach<br />    &lt;/table&gt;<br /><br />@endsection<br /><br />No método index do controller podemos adicionar um título para a página:<br />    $title = 'Listagem de produtos';<br />    return view('produtos.index', compact('produtos', 'title'));<br /><br /><br />No controller, método create criar uma variável categoria, com um array com as categorias<br /><br />No método create criar também a variável $title<br /><br />&lt;form class="form" mathod="post" action="{{route('produtos.store')}}"&gt;<br />    &lt;input type="hidden" name="_token" value="{{csrf_token}}"&gt;    <br />    &lt;input type="text" name="nome" placeholder="Nome:" class="form-control"&gt;<br />    &lt;label&gt;<br />        &lt;input type="checkbox" name="active"&gt;&lt;br&gt;<br />        Ativo?<br />    &lt;/label&gt;<br />    &lt;input type="text" name="number" placeholder="Número:" class="form-control"&gt;<br />    &lt;select name="categoria" class="form-control"&gt;<br />        &lt;option value=""&gt;Escolha a categoria&lt;/option&gt;<br />        @foreach($categorias as $categoria)<br />            &lt;option&gt;{{$categoria}}&lt;/opton&gt;<br />        @endforeach<br />    &lt;/select&gt;<br />    &lt;textarea name="descricao" placeholder="Descricao" class="form-control"&gt;&lt;/textarea&gt;<br />&lt;/form&gt;<br /><br />No Laravel Todo form precisa de um campo com o token<br /><br />ou substituir o campo por<br />{!! csrf_field() !!}<br /><br />O método store<br /><br />public function store(Request $request)<br />{<br />    // Recupera todos os campos do form - $request-&gt;all();<br />}<br /><br />Para recuperar apenas alguns campos:<br /><br />    $request-&gt;only(['nome', 'number']);<br /><br />Recupererar todos, exceto alguns:<br /><br />    $request-&gt;except(['_token', 'categoria']);<br /><br /><strong>Recuperar apenas um campo</strong><br />    $request-&gt;input('nome');<br /><br />Recuperar campo pelo seu nome<br />    $request-&gt;name;<br /><br /><strong>Cadastrar os dados do form na tabela</strong><br /><br />public function store(Request $request)<br />{<br />    // Pega todos os campos do form<br />    $dataForm = $request-&gt;except('_token');<br />    <br />    // Faz o cadastro<br />    $insert = $this-&gt;product-&gt;insert($dataForm);<br /><br />    if($insert)<br />        return redirect()-&gt;route('produtos.index');<br />    else<br />        return redirect()-&gt;back(); // Volta para onde veio<br />//ou<br />    //    return redirect()-&gt;route('produtos.create'); // Volta para onde veio<br />}<br /><br /><strong>Para o avtive, que é requerido</strong><br /><br />if($dataForm['active'] == '')<br />    $dataForm['active'] = 0;<br />else<br />    $dataForm['active'] =1;<br />ou<br />    $active['dataForm'] = (!isset($dataForm['active'])) ? 0 : 1;<br /><br /><br /><strong>Validação dos dados antes de submeter o form</strong><br /><br />Validar no método store antes de inserir no banco<br /><br />As regras de validação devem ficar no model e não no controller<br /><br />Editemos o model produto e adicionemos uma variável public (também pode ser um mátodo)<br /><br />    public $rules = [<br />        'nome' =&gt; 'required|min:5|max:100',<br />        'number' =&gt; 'required|numeric',<br />        'categoria' =&gt; 'required',<br />        'descricao' =&gt; 'min:3|max:1000'<br />    ];<br /><br />Adicionar ao método store, antes de inserir:<br /><br />$this-&gt;validate($request, $this-&gt;produto-&gt;rules);<br /><br />Mostrar as mensagens de erro da validação na view create<br />Logo no início do form, abaixo da tag form<br /><br />@if(isset($errors) &amp;&amp; count($errors) &gt;0)<br />    &lt;div class="alert alert-danger"&gt;<br />        @foreach($errors-&gt;all(() as $error)<br />            &lt;p&gt;{{$error}}&lt;/p&gt;<br />        @endforeach<br />    &lt;/div&gt;<br />@endif<br /><br />Como manter os valores digitados nos campos do form após o submit?<br /><br />Em cada campo<br />... value="{{old('nome')}}"<br /><br />No método store, na validação podemos passar uma variável com as mensagens de erro<br /><br /><br />$this-&gt;validate($request, $this-&gt;produto-&gt;rules, $messages);<br /><br /><strong>Personalizando as mensagens:</strong><br /><br />$mensagens = [<br />    'nome.required' =&gt; 'Nome obrigatório',<br />    'nome.min' =&gt; "Nome com pelo menos 3 caracteres',<br />    'number.numric' =&gt; 'Number precisa ser numérico' <br />];<br /><br /><a href="https://www.youtube.com/watch?v=fPs-PlQIWaw&amp;index=6&amp;list=PLVSNL1PHDWvR3PeLXz6nvBkDhv1IQk4wP">https://www.youtube.com/watch?v=fPs-PlQIWaw&amp;index=6&amp;list=PLVSNL1PHDWvR3PeLXz6nvBkDhv1IQk4wP</a></p>]]></description>
			<category>Tutoriais</category>
			<pubDate>Sun, 25 Jun 2017 21:08:35 -0300</pubDate>
		</item>
		<item>
			<title>Laravel - Model</title>
			<link>http://backup/portal/frameworks/laravel-5/tutoriais/laravel-model.html</link>
			<guid isPermaLink="true">http://backup/portal/frameworks/laravel-5/tutoriais/laravel-model.html</guid>
			<description><![CDATA[<p><strong>Models - lidam com código que manipula bancos de dados</strong><br /><br />No Laravel 5 ficam na pasta \app<br /><br />Cada tabela tem um model correspondente, que é usado para interagir com a tabela. Models permitem consultar a tabela e também inserir registros na mesma.<br /><br />Ficam em app soltos, mas podemos criar dentro de outras pastas, tendo o cuidado de alterar seu namespace<br /><br /><strong>Todo model Eloquent extend a classe</strong><br />Illuminate\Database\Eloquent\Model<br /><br />https://www.youtube.com/watch?v=eFuhNCFrR2E&amp;index=12&amp;list=PLVSNL1PHDWvTQnUQjhBEzY2ZSzJTR9zcZ<br /><br /><strong>Criar uma model com o artisan</strong><br />php artisan make:model Carro<br /><br /><strong>ou para criar juntamente com a migration:</strong><br />php artisan make:model Carro -m<br /><br />Para o laravel uma tabela <strong>carros</strong> é representada por um model <strong>carro</strong>.<br /><br />O comando acima cria uma classe vazia de Model, mas é suficiente.<br /><br />Agora basta alterar o Controller, passando este model.<br /><br /><br />Podemos criar um diretório para os models dentro de app<br /><br />Então passamos este diretório no namespace do model que criamos e de outros que criarmos.<br /><br />php artisan make:model Produto<br /><br />Criar uma pasta para os models:<br /><br />app/Models<br /><br />Criar o mesmo model em app/Models (já cria com o namespace correto em models)<br />php artisan make:model Models\\Produto<br /><br />Para uma tabela chamada produtos um model Produto.<br /><br />Criar também a migration:<br />php artisan make:model Models\\Produto -m<br /><br /><br />No controller adicionar:<br /><br />use App\Models\Produto;<br /><br />public function index(Produto $produto){<br />    $produtos = $produto-&gt;all();<br /><br />    return view('produtos.index', compact('produtos'));<br />}<br /><br />Criar a view index em views/produtos/index.blade.php<br /><br />&lt;h1&gt;Listagem de Produtos&lt;/h1&gt;<br /><br />&lt;table&gt;<br />    &lt;tr&gt;<br />        &lt;th&gt;Nome&lt;/th&gt;<br />        &lt;th&gt;Descrição&lt;/th&gt;<br />    &lt;/tr&gt;<br />    @foreach($produtos as $produto)<br />    &lt;tr&gt;<br />        &lt;td&gt;{{$produto-&gt;nome}}&lt;/td&gt;<br />        &lt;td&gt;{{$produto-&gt;descricao}}&lt;/td&gt;<br />    &lt;/r&gt;<br />    @endforeach<br />&lt;/table&gt;<br /><br /><strong>Criar uma rota para produtos</strong><br /><br />Route::resource('produtos', 'Produtos\ProdutoController');<br /><br /><br /></p>]]></description>
			<category>Tutoriais</category>
			<pubDate>Sun, 25 Jun 2017 21:08:35 -0300</pubDate>
		</item>
		<item>
			<title>Laravel - View</title>
			<link>http://backup/portal/frameworks/laravel-5/tutoriais/laravel-view.html</link>
			<guid isPermaLink="true">http://backup/portal/frameworks/laravel-5/tutoriais/laravel-view.html</guid>
			<description><![CDATA[<p><strong>Views - camada de apresentação, que mostra os dados para o usuário, geralmente como HTML</strong><br /><br />Para usar facade de Forms e HTML no laravel 5 execute:<br /><br />composer require Collective\Html<br /><br />Adicionar ao require do composer.json:<br />        "laravelcollective/html": "5.4.6"<br /><br />composer update<br /><br />Adicionar na seção provider de config/app.php a linha<br /><br />Collective\Html\HtmlServiceProvider::class,<br /><br />E na seção aliases de config/app.php:<br /><br />'Form'     =&gt; Collective\Html\FormFacade::class,<br />'Html'     =&gt; Collective\Html\HtmlFacade::class,<br /><br />Depois disso podemos criar forms assim:<br /><br />{!! Form::open([<br />    'route' =&gt; 'tasks.store'<br />]) !!}<br /><br />&lt;div class="form-group"&gt;<br />    {!! Form::label('title', 'Title:', ['class' =&gt; 'control-label']) !!}<br />    {!! Form::text('title', null, ['class' =&gt; 'form-control']) !!}<br />&lt;/div&gt;<br /><br />&lt;div class="form-group"&gt;<br />    {!! Form::label('description', 'Description:', ['class' =&gt; 'control-label']) !!}<br />    {!! Form::textarea('description', null, ['class' =&gt; 'form-control']) !!}<br />&lt;/div&gt;<br /><br />{!! Form::submit('Create New Task', ['class' =&gt; 'btn btn-primary']) !!}<br />{!! Form::close() !!}<br /><br />if(view()-&gt;exists('clientes.store')){<br /><br />}<br /><br />{{ $nome or 'Valor Default'}}<br /><br />Dados sem caracteres de scape<br /><br />Olá, {!! $nome !!}<br /><br />Formato de data<br /><br />echo with($var)-&gt;format('d/m/Y H:i');<br /><br /><br /></p>]]></description>
			<category>Tutoriais</category>
			<pubDate>Sun, 25 Jun 2017 21:08:35 -0300</pubDate>
		</item>
		<item>
			<title>Relacionamentos</title>
			<link>http://backup/portal/frameworks/laravel-5/tutoriais/relacionamentos.html</link>
			<guid isPermaLink="true">http://backup/portal/frameworks/laravel-5/tutoriais/relacionamentos.html</guid>
			<description><![CDATA[<p><strong>Relacionamento entre tabelas e entre models no Laravel 5</strong></p>


<p>Para relacionar tabelas usar a convenção<br /><br />inserir um campo chamado <br />tabela_id int not null<br /><br /><strong>Relacionar users com groups:</strong><br /><br />groups<br />id<br /><br />users<br />id<br />group_id<br /><br /><strong>Relacionar os Models Task com User</strong><br /><br />class Task extends Model {<br />    public function user()<br />    {<br />        return $this-&gt;belongsTo('User');<br />    }<br />}<br /> <br />class User extends Model {<br />    public function tasks()<br />    {<br />        return $this-&gt;hasMany('Task');<br />    }<br />}<br /><br /><br /><strong>Relacionamento entre posts e comments</strong><br />Um para muitos<br /><br />namespace App;<br /><br />use Illuminate\Database\Eloquent\Model;<br /><br />class Post extends Model<br />{<br />    /**<br />     * Get the comments for the blog post.<br />     */<br />    public function comments()<br />    {<br />        return $this-&gt;hasMany('App\Comment'); // Passamos aqui a chave estrangeira, mas somente quando diferente<br />    }<br />}<br /><br />Comments<br />&lt;?php<br /><br />namespace App;<br /><br />use Illuminate\Database\Eloquent\Model;<br /><br />class Comment extends Model<br />{<br />    /**<br />     * Get the post that owns the comment.<br />     */<br />    public function post()<br />    {<br />        return $this-&gt;belongsTo('App\Post');<br />    }<br />}<br /><br />Ou usamos App\Post<br />ou fazemos o importe no começo e usamos apenas Post<br /><br /><br /><strong>Usando o tinker para trazer um produto e suas avaliações</strong><br /><br />php artisan tinker<br /><br />use Loja\Produto;<br />$p-&gt;Prpduto::find(5);<br /><br />$p-&gt;avaliacoes;<br /><br /></p>]]></description>
			<category>Tutoriais</category>
			<pubDate>Sun, 25 Jun 2017 21:08:35 -0300</pubDate>
		</item>
	</channel>
</rss>
