php - example - select2 data format
Urls dinĂ¡micas en laravel? (3)
Estoy buscando cambiar a laravel para mi próximo proyecto.
Mi próximo proyecto probablemente sea un sitio pequeño con algunas páginas estáticas, un blog y un administrador de proyectos, y utilizará controladores y no rutas.
Lo que me interesa es cómo puedo administrar rutas dinámicas en Laravel.
Básicamente, quiero construir en una sección de administrador para que pueda crear fácilmente las páginas estáticas sobre la marcha, y las páginas estáticas tendrán direcciones URL centradas en SEO, por ejemplo, http://domain.com/when-it-started , no quiero tener que crear un nuevo controlador o ruta de forma manual para cada página.
Entonces me pregunto cuál es la forma más limpia de manejar esto.
esencialmente, todas las páginas estáticas compartirán la misma vista, solo unas pocas variables para cambiar.
El enrutamiento dinámico debería funcionar con los controladores no en lugar de.
Por ejemplo, si tenemos un controlador con un staff
función staff
entonces esto debe cargarse a través de http://domain.com/about/staff
pero no tenemos los players
funciones, por lo que una llamada a http://domain.com/about/players debería verificar la base de datos para ver si existe una ruta dinámica y coincide. Si muestra eso, de lo contrario, muestra la página 404. Del mismo modo para un controlador inexistente. (por ejemplo, no habría un controlador de when-it-started
)
La respuesta elegida no parece funcionar en Laravel 4. ¿Alguna ayuda con eso?
Muy similar a la respuesta de Charles, pero en el controlador:
public function showBySlug($slug) {
$post = Post::where(''slug'',''='',$slug)->first();
// would use app/posts/show.blade.php
return View::make(''posts.show'')->with(array(
''post'' => $post,
));
}
Entonces puedes enrutarlo así:
Route::get(''post/{slug}'', ''PostsController@showBySlug'')
->where(''slug'', ''[/-_A-Za-z]+'');`
... que tiene la ventaja añadida de permitirle una forma fácil de vincular directamente a las rutas slug en una página de índice, por ejemplo:
@foreach ($posts as $post)
<h2>{{ HTML::link(
action(''PostsController@showBySlug'', array($post->slug)),
$post->title
)}}</h2>
@endforeach
Para Laravel 4 haz esto
Route::get(''{slug}'', function($slug) {
$page = Page::where(''slug'', ''='', $slug)->first();
if ( is_null($page) )
// use either one of the two lines below. I prefer the second now
// return Event::first(''404'');
App::abort(404);
return View::make(''pages.show'', array(''page'' => $page));
});
// for controllers and views
Route::get(''{page}'', array(''as'' => ''pages.show'', ''uses'' => ''PageController@show''));
Puede usar los comodines de ruta para el trabajo, puede comenzar con un (:any)
y si necesita varios segmentos de URL, agregue un (:all?)
Opcional, luego identifique la página del babosa.
Por ejemplo:
Route::get(''(:any)'', function($slug) {
$page = Page::where_slug($slug)->first();
if ( is_null($page) )
return Event::first(''404'');
return View::make(''page'')->with($page);
});